diff options
Diffstat (limited to 'buildbot/buildbot-source/ChangeLog')
-rw-r--r-- | buildbot/buildbot-source/ChangeLog | 6129 |
1 files changed, 0 insertions, 6129 deletions
diff --git a/buildbot/buildbot-source/ChangeLog b/buildbot/buildbot-source/ChangeLog deleted file mode 100644 index 89f9fb7a9..000000000 --- a/buildbot/buildbot-source/ChangeLog +++ /dev/null @@ -1,6129 +0,0 @@ -2006-05-23 Brian Warner <warner@lothar.com> - - * buildbot/__init__.py (version): Releasing buildbot-0.7.3 - * docs/buildbot.texinfo: set version to match - * NEWS: update for 0.7.3 - - * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py, - give a quick mapping from VC system to possible ChangeSources - (Build Properties): add 'buildername' - - * buildbot/process/base.py (Build.setupStatus): oops, set - 'buildername' and 'buildnumber' properties - * buildbot/test/test_properties.py (Interpolate.testBuildNumber): - test them - -2006-05-22 Brian Warner <warner@lothar.com> - - * docs/buildbot.texinfo (Build Properties): explain the syntax of - property interpolation better - - * README (INSTALLATION): remove old '-v' argument from recommended - trial command line - - * docs/buildbot.texinfo (ShellCommand): add docs for description= - and descriptionDone= arguments. Thanks to Niklaus Giger for the - patch. SF#1475494. - - * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use - 'svnversion' instead of grepping the output of 'svn info', much - simpler and avoids CR/LF problems on windows. Thanks to Olivier - Bonnet for the suggestion. - (SVN.parseGotRevision): oops, older verisons of 'svnversion' - require the WC_PATH argument, so run 'svnversion .' instead. - - * buildbot/interfaces.py (IChangeSource): methods in Interfaces - aren't supposed to have 'self' in their argument list - -2006-05-21 Brian Warner <warner@lothar.com> - - * buildbot/process/step.py (ShellCommand.start): make - testInterpolate pass. I was passing the uninterpolated command to - the RemoteShellCommand constructor - (ShellCommand._interpolateProperties): oops, handle non-list - commands (i.e. strings with multiple words separated by spaces in - them) properly, instead of forgetting about them. - - * buildbot/test/test_properties.py (Run.testInterpolate): new test - to actually try to use build properties in a real build. This test - fails. - * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods - to start and evaluate builds - - * buildbot/test/test__versions.py: add a pseudo-test to record - what version of Twisted/Python/Buildbot are running. This should - show up at the beginning of _trial_tmp/test.log, and exists to help - debug other problems. - - * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument, - a filename to be served as 'robots.txt' to discourage web spiders. - Adapted from a patch by Tobi Vollebregt, thanks! - * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it - (Waterfall.test_waterfall): tweak the way that filenames are put - into the config file, to accomodate windows pathnames better. - - * docs/buildbot.texinfo (HTML Waterfall): document it - - * buildbot/process/process_twisted.py - (QuickTwistedBuildFactory.__init__): recent versions of Twisted - changed the build process. The new setup.py no longer takes the - 'all' argument. - (FullTwistedBuildFactory.__init__): same - (TwistedReactorsBuildFactory.__init__): same - - * contrib/hg_buildbot.py: wrote a commit script for mercurial, to - be placed in the [hooks] section of the central repository (the - one that everybody pushes changes to). - -2006-05-20 Brian Warner <warner@lothar.com> - - * buildbot/slave/commands.py (Darcs.doVCFull): when writing the - .darcs-context file, use binary mode. I think this was causing a - Darcs failure under windows. - -2006-05-19 Brian Warner <warner@lothar.com> - - * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision): - use a timezone string of +0000 and gmtime, since this timestamp is - sent to a buildmaster and %z is broken. - - * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone - string and localtime, since this timestamp will only be consumed - locally, and %z is broken. - - * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and - gmtime, since this timestamp is returned to the buildmaster, and - %z is broken. - -2006-05-18 Brian Warner <warner@lothar.com> - - * NEWS: update in preparation for next release - - * buildbot/test/test_vc.py (VCS_Helper): factor out all the - setup-repository and do-we-have-the-vc-tools code into a separate - "helper" class, which sticks around in a single module-level - object. This seems more likely to continue to work in the future - than having it hide in the TestCase and hope that TestCases stick - around for a long time. - - * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg - addremove' has been deprecated in recent versions of mercurial, so - use 'hg add' instead - -2006-05-07 Brian Warner <warner@lothar.com> - - * buildbot/scheduler.py (Try_Jobdir.messageReceived): when - operating under windows, move the file before opening it, since - you can't rename a file that somebody has open. - - * buildbot/process/base.py (Build.setupBuild): if something goes - wrong while creating a Step, log the name and arguments, since the - error message when you get the number of arguments wrong is really - opaque. - -2006-05-06 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (Trial.setupEnvironment): more - bugs in twisted-specific code not covered by my unit tests, this - time use 'cmd' argument instead of self.cmd - - * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant): - fix stupid braino: either use startwith or find()==0, not both. - (TwistedReactorsBuildFactory.__init__): another dumb typo - - * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1): - mark this test as TODO under windows, since process-killing seems - dodgy there. We'll come back to this later and try to fix it - properly. - - * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime, - and don't include a timezone - (CVSSupport.vc_try_checkout): stop trying to strip the timezone. - This should avoid the windows-with-verbose-timezone-name problem - altogether. - (Patch.testPatch): add a test which runs 'patch' with less - overhead than the full VCBase.do_patch sequence, to try to isolate - a windows test failure. This one uses slave.commands.ShellCommand - and 'patch', but none of the VC code. - - * buildbot/slave/commands.py (getCommand): use which() to find the - executables for 'cvs', 'svn', etc. This ought to help under - windows. - - * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the - working directory before starting. If an earlier test failed, the - leftover directory would mistakenly flunk a later test. - (ArchCommon.registerRepository): fix some tla-vs-baz problems. - Make sure that we use the right commandlines if which("tla") picks - up "tla.exe" (as it does under windows). - (TlaSupport.do_get): factor out this tla-vs-baz difference - (TlaSupport.vc_create): more tla-vs-baz differences - - * buildbot/test/test_slavecommand.py - (ShellBase.testShellMissingCommand): stop trying to assert - anything about the error message: different shells on different - OSes with different languages makes it hard, and it really isn't - that interesting of a thing to test anyway. - - * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if - we detect cvs-1.10 (which is the version shipped with OS-X 10.3 - "Panther"), because it has a bug which flunks a couple tests in - weird ways. I've checked that cvs-1.12.9 (as shipped with debian) - is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been - able to test that yet. - -2006-04-30 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to - make sure child commands emit messages in english, so our regexps - will match. Thanks to Nikaus Giger for identifying the problems. - (VCBase._do_vctest_export_1): mode="export" is not responsible - for setting the "got_revision" property, since in many cases it is - not convenient to determine. - (SVNSupport.capable): when running 'svn --version' to check for - ra_local, we want error messages in english - * buildbot/test/test_slavecommand.py - (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash - to emit the error message in english - - * buildbot/slave/commands.py (SourceBase.setup): stash a copy of - the environment with $LC_ALL="C" so that Commands which need to - parse the output of their child processes can obtain it in - english. - (SVN.parseGotRevision): call "svn info" afterwards instead of - watching the output of the "svn update" or "svn checkout". - (Darcs.parseGotRevision): use $LC_ALL="C" when running the command - (Arch.parseGotRevision): same - (Bazaar.parseGotRevision): same - (Mercurial.parseGotRevision): same - - * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set - $LC_ALL="C" when running commands under 'buildbot try', too - - * buildbot/test/__init__.py: remove the global os.environ() - setting, instead we do it just for the tests that run commands and - need to parse their output. - - * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): - remove the overly-short .timeout on this test, because non-DNotify - platforms must fall back to polling which happens at 10 second - intervals, so a 5 second timeout would never succeed. - -2006-04-24 Brian Warner <warner@lothar.com> - - * docs/buildbot.texinfo (Installing the code): update trial - invocation, SF#1469116 by Niklaus Giger. - (Attributes of Changes): updated branch-name examples to be - a bit more realistic, SF#1475240 by Stephen Davis. - - * contrib/windows/buildbot2.bat: utility wrapper for windows - developers, contributed by Nick Trout (after a year of neglect.. - sorry!). SF#1194231. - - * buildbot/test/test_vc.py (*.capable): store the actual VC - binary's pathname in VCS[vcname], so it can be retrieved later - (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to - strip out non-numeric timezone information, specifically the funky - German string that his system produced that confuses CVS. - (DarcsSupport.vc_create): use dovc() instead of vc(), this should - allow Darcs tests to work on windows - * buildbot/scripts/tryclient.py (SourceStampExtractor): use - procutils.which() everywhere, to allow tryclient to work under - windows. Also from Niklaus Giger, SF#1463394. - - * buildbot/twcompat.py (which): move the replacement for a missing - twisted.python.procutils.which from test_vc.py to here, so it can - be used in other places too (specifically tryclient.py) - -2006-04-23 Brian Warner <warner@lothar.com> - - * buildbot/status/html.py (StatusResourceBuild.body): replace the - bare buildbotURL/projectName line with a proper DIV, along with a - CSS class of "title", from Stefan Seefeld (SF#1461675). - (WaterfallStatusResource.body0): remove the redundant 'table' - class from the table - (WaterfallStatusResource.body): same. Also add class="LastBuild" - to the top-row TR, and class="Activity" to the second-row TR, - rather than putting them in the individual TD nodes. - - * buildbot/test/test_vc.py (VCBase.checkGotRevision): test - 'got_revision' build property for all VC systems that implement - accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial. - - * buildbot/slave/commands.py (SourceBase._handleGotRevision): try - to determine which revision we actually obtained - (CVS.parseGotRevision): implement this for CVS, which just means - to grab a timestamp. Not ideal, and it depends upon the buildslave - having a clock that is reasonably well syncronized with the server, - but it's better than nothing. - (SVN.parseGotRevision): implement it for SVN, which is accurate - (Darcs.parseGotRevision): same - (Arch.parseGotRevision): same - (Bazaar.parseGotRevision): same - (Mercurial.parseGotRevision): same - - * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): - keep a record of all non-stdout/stderr/header/rc status updates, - for the benefit of RemoteCommands that send other useful things, - like got_revision - (Source.commandComplete): put any 'got_revision' status values - into a build property of the same name - - - * buildbot/process/step_twisted.py (Trial): update to deal with - new ShellCommand refactoring - - * docs/buildbot.texinfo (Build Properties): document new feature - that allows BuildSteps to get/set Build-wide properties like which - revision was requested and/or checked out. - - * buildbot/interfaces.py (IBuildStatus.getProperty): new method - * buildbot/status/builder.py (BuildStatus.getProperty): implement - it. Note that this bumps the persistenceVersion of the saved Build - object, so add the necessary upgrade-old-version logic to include - an empty properties dict. - - * buildbot/process/base.py (Build.setProperty): implement it - (Build.getProperty): same - (Build.startBuild): change build startup to set 'branch', - 'revision', and 'slavename' properties at the right time - - * buildbot/process/step.py (BuildStep.__init__): change setup to - require 'build' argument in a better way - (LoggingBuildStep): split ShellCommand into two pieces, for better - subclassing elsewhere. LoggingBuildStep is a BuildStep which runs - a single RemoteCommand that sends stdout/stderr status text. It - also provides the usual commandComplete / createSummary / - evaluateCommand / getText methods to be overridden... - (ShellCommand): .. whereas ShellCommand is specifically for - running RemoteShellCommands. Other shell-like BuildSteps (like - Source) can inherit from LoggingBuildStep instead of ShellCommand - (WithProperties): marker class to do build-property interpolation - (Source): inherit from LoggingBuildStep instead of ShellCommand - (RemoteDummy): same - - * buildbot/test/test_properties.py: test new functionality - -2006-04-21 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py: rename testBranch to - testCheckoutBranch to keep the tests in about the right - alphabetical order - -2006-04-18 Brian Warner <warner@lothar.com> - - * docs/buildbot.texinfo (PBListener): improve cross-references - between PBListener and 'buildbot statusgui', thanks to John Pye - for the suggestion. - -2006-04-17 Brian Warner <warner@lothar.com> - - * buildbot/twcompat.py (maybeWait): handle SkipTest properly when - running under Twisted-1.3.0, otherwise skipped tests are reported - as errors. - - * all: use isinstance() instead of 'type(x) is foo', suggested by - Neal Norwitz - - * buildbot/process/process_twisted.py (QuickTwistedBuildFactory): - oops, fix a brain-fade from the other week, when making the - addStep changes. I changed all the __init__ upcalls to use the - wrong superclass name. - (FullTwistedBuildFactory.__init__): same - (TwistedDebsBuildFactory.__init__): same - (TwistedReactorsBuildFactory.__init__): same - (TwistedBuild.isFileImportant): use .startswith for clarity, - thanks to Neal Norwitz for the suggestions. - - * contrib/viewcvspoll.py: script to poll a viewcvs database for - changes, then deliver them over PB to a remote buildmaster. - - * contrib/svnpoller.py: added script by John Pye to poll a remote - SVN repository (by running 'svn log') from a cronjob, and run - 'buildbot sendchange' to deliver the changes to a remote - buildmaster. - * contrib/svn_watcher.py: added script by Niklaus Giger (a - modification of svnpoller.py), same purpose, but this one loops - internally (rather than expecting to run from a cronjob) and works - under windows. - * contrib/README.txt: same - -2006-04-11 Brian Warner <warner@lothar.com> - - * all: fix a number of incorrect names and missing imports, thanks - to Anthony Baxter for the patch. - * buildbot/status/html.py (WaterfallStatusResource.statusToHTML): - remove unused buggy method. - * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree - comes from shutil, not "shutils" - * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name - (Arch.checkSlaveVersion): same - * buildbot/process/step_twisted.py (Trial.commandComplete): same, in - some disabled code - * buildbot/process/step_twisted2.py: add some missing imports - * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error, - this code used to live in twisted.internet.defer - -2006-04-10 Brian Warner <warner@lothar.com> - - * buildbot/process/step.py (Mercurial): add Mercurial support - * buildbot/slave/commands.py (Mercurial): same - * buildbot/scripts/tryclient.py (MercurialExtractor): same - * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is - not yet tested, but 'try' support *is* covered - * docs/buildbot.texinfo (Mercurial): document it - - * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add - some debugging messages (turned off) - * buildbot/test/test_vc.py: improve debug messages - -2006-04-07 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py (which): define our own which() in case - we can't import twisted.python.procutils, because procutils doesn't - exist in Twisted-1.3 - - * docs/buildbot.texinfo (Interlocks): fix some typos, mention use - of SlaveLocks for performance tests - - * docs/examples/twisted_master.cfg: update to match current usage - - * buildbot/changes/p4poller.py (P4Source): add new arguments: - password, p4 binary, pollinterval, maximum history to check. - Patch from an anonymous sf.net contributor, SF#1219384. - * buildbot/process/step.py (P4Sync.__init__): add username, - password, and client arguments. - * buildbot/slave/commands.py (P4Sync): same - -2006-04-05 Brian Warner <warner@lothar.com> - - * buildbot/process/factory.py (BuildFactory.addStep): new method - to add steps to a BuildFactory. Use it instead of f.steps.append, - and you can probably avoid using the s() convenience function. - Patch from Neal Norwitz, sf.net #1412605. - (other): update all factories to use addStep - * buildbot/process/process_twisted.py: update all factories to use - addStep. - -2006-04-03 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py: modified find-the-VC-command logic to - work under windows too. Adapted from a patch by Niklaus Giger, - addresses SF#1463399. - - * buildbot/test/__init__.py: set $LANG to 'C', to insure that - spawned commands emit parseable results in english and not some - other language. Patch from Niklaus Giger, SF#1463395. - - * README (INSTALLATION): discourage users from running unit tests on - a "network drive", patch from Niklaus Giger, SF#1463394. - -2006-03-22 Brian Warner <warner@lothar.com> - - * contrib/svn_buildbot.py: rearrange, add an easy-to-change - function to turn a repository-relative pathname into a (branch, - branch-relative-filename) tuple. Change this function to handle - the branch naming policy used by your Subversion repository. - Thanks to AllMyData.com for sponsoring this work. - -2006-03-16 Brian Warner <warner@lothar.com> - - * buildbot/scripts/sample.cfg: add python-mode declaration for - vim. Thanks to John Pye for the patch. - - * docs/buildbot.texinfo (Launching the daemons): fix @reboot job - command line, mention the importance of running 'crontab' as the - buildmaster/buildslave user. Thanks to John Pye for the catch. - -2006-03-13 Brian Warner <warner@lothar.com> - - * buildbot/status/words.py (IRC): add an optional password= - argument, which will be sent to Nickserv in an IDENTIFY message at - login, to claim the nickname. freenode requires this before the - bot can sent (or reply to) private messages. Thanks to Clement - Stenac for the patch. - * docs/buildbot.texinfo (IRC Bot): document it - - * buildbot/status/builder.py (LogFile.merge): don't write chunks - larger than chunkSize. Fixes SF#1349253. - * buildbot/test/test_status.py (Log.testLargeSummary): test it - (Log.testConsumer): update to match new internal chunking behavior - -2006-03-12 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py: remove the last use of waitForDeferred - - * buildbot/test/test_maildir.py (MaildirTest): rename the - 'timeout' method, as it collides with trial's internals - - * buildbot/scripts/runner.py: add 'buildbot restart' command - (stop): don't sys.exit() out of here, otherwise restart can't work - * docs/buildbot.texinfo (Shutdown): document it - - * buildbot/buildset.py (BuildSet.__init__): clean up docstring - * buildbot/status/html.py (Waterfall.__init__): same - * buildbot/process/builder.py (Builder.startBuild): same - * buildbot/process/base.py (BuildRequest): same - * buildbot/sourcestamp.py (SourceStamp): same - * buildbot/scheduler.py (Nightly): same - - * buildbot/__init__.py (version): bump to 0.7.2+ while between - releases - * docs/buildbot.texinfo: same - -2006-02-17 Brian Warner <warner@lothar.com> - - * buildbot/__init__.py (version): Releasing buildbot-0.7.2 - * docs/buildbot.texinfo: set version number to match - * NEWS: update for 0.7.2 - -2006-02-16 Brian Warner <warner@lothar.com> - - * docs/buildbot.texinfo (Build Dependencies): add cindex tag - -2006-02-09 Brian Warner <warner@lothar.com> - - * docs/buildbot.texinfo (How Different VC Systems Specify Sources): - add text to explain per-build branch parameters - * NEWS: mention --umask - -2006-02-08 Brian Warner <warner@lothar.com> - - * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused - method - (SlaveOptions.optParameters): add --umask, to make it possible to - make buildslave-generated files (including build products) be - world-readable - (slaveTAC): same - * buildbot/slave/bot.py (BuildSlave.startService): same - -2006-01-23 Brian Warner <warner@lothar.com> - - * buildbot/status/builder.py: urllib.quote() all URLs that include - Builder names, so that builders can include characters like '/' - and ' ' without completely breaking the resulting HTML. Thanks to - Kevin Turner for the patch. - * buildbot/status/html.py: same - * buildbot/test/test_web.py (GetURL.testBuild): match changes - - * NEWS: update in preparation for upcoming release - -2006-01-18 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.cfg: update to match the Twisted - buildbot: remove python2.2, switch to exarkun's buildslaves, - disable the .deb builder until we figure out how to build twisted - .debs from SVN, add some ktrace debugging to the OS-X build - process and remove the qt build, remove threadless builders, - change freebsd builder to use landonf's buildslave. - -2006-01-12 Brian Warner <warner@lothar.com> - - * buildbot/master.py (Manhole.__init__): let port= be a strports - specification string, but handle a regular int for backwards - compatibility. This allows "tcp:12345:interface=127.0.0.1" to be - used in master.cfg to limit connections to just the local host. - (BuildMaster.loadConfig): same for c['slavePortnum'] - * buildbot/scheduler.py (Try_Userpass.__init__): same - * buildbot/status/client.py (PBListener.__init__): same - * buildbot/status/html.py (Waterfall.__init__): same, for both - http_port and distrib_port. Include backwards-compatibility checks - so distrib_port can be a filename string and still mean unix:/foo - * docs/buildbot.texinfo (Setting the slaveport): document it - (Debug options): same - (HTML Waterfall): same - (PBListener): same - (try): same - * buildbot/test/test_config.py (ConfigTest): test it - - * buildbot/master.py (BuildMaster.loadConfig): wait for the - slaveport's disownServiceParent deferred to fire before opening - the new one. Fixes an annoying bug in the unit tests. - -2006-01-03 Brian Warner <warner@lothar.com> - - * buildbot/master.py (BuildMaster): remove the .schedulers - attribute, replacing it with an allSchedulers() method that looks - for all IService children that implement IScheduler. Having only - one parent/child relationship means fewer opportunities for bugs. - (BuildMaster.allSchedulers): new method - (BuildMaster.loadConfig_Schedulers): update to use allSchedulers, - also fix ugly bug that caused any config-file reload to - half-forget about the earlier Schedulers, causing an exception - when a Change arrived and was handed to a half-connected - Scheduler. The exception was in scheduler.py line 54ish: - self.parent.submitBuildSet(bs) - exceptions.AttributeError: 'NoneType' object has no attribute - 'submitBuildSet' - (BuildMaster.addChange): update to use allSchedulers() - - * buildbot/scheduler.py (BaseScheduler.__implements__): fix this - to work properly with twisted-1.3.0, where you must explicitly - include the __implements__ from parent classes - (BaseScheduler.__repr__): make it easier to distinguish distinct - instances - (BaseUpstreamScheduler.__implements__): same - - * buildbot/status/builder.py (Status.getSchedulers): update to - use allSchedulers() - * buildbot/test/test_run.py (Run.testMaster): same - * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same - * buildbot/test/test_config.py (ConfigTest.testSchedulers): same, - make sure Scheduler instances are left alone when an identical - config file is reloaded - (ConfigElements.testSchedulers): make sure Schedulers are properly - comparable - - * Makefile (TRIALARGS): my local default Twisted version is now - 2.1.0, update the trial arguments accordingly - -2005-12-22 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.cfg: merge changes from pyr: add - new win32 builders - - * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy - addChange in the parent class, although I suspect this should be - fixed better in the future. - -2005-11-26 Brian Warner <warner@lothar.com> - - * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't - explode when branch==None, thanks to Kevin Turner for the catch - * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test - it - - * buildbot/__init__.py (version): bump to 0.7.1+ while between - releases - * docs/buildbot.texinfo: same - -2005-11-26 Brian Warner <warner@lothar.com> - - * buildbot/__init__.py (version): Releasing buildbot-0.7.1 - * docs/buildbot.texinfo: set version number to match - -2005-11-26 Brian Warner <warner@lothar.com> - - * NEWS: update for 0.7.1 - - * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make - sure that unsubscribe works even if we never sent an ETA update. - Also, don't explode on duplicate unsubscribe. - (BuildStepStatus.addLog): make the convenience "return self"-added - watcher automatically unsubscribe when the Step finishes. - (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe - (BuildStatus.stepStarted): same auto-unsubscribe - (BuilderStatus.buildStarted): same auto-unsubscribe - - * buildbot/interfaces.py (IStatusReceiver.buildStarted): document - auto-unsubscribe - (IStatusReceiver.stepStarted): same - (IStatusReceiver.logStarted): same - - * buildbot/test/test_run.py (Status): move the Status test.. - * buildbot/test/test_status.py (Subscription): .. to here - -2005-11-25 Brian Warner <warner@lothar.com> - - * NEWS: more updates - - * buildbot/locks.py: fix the problem in which loading a master.cfg - file that changes some Builders (but not all of them) can result - in having multiple copies of the same Lock. Now, the real Locks - are kept in a table inside the BotMaster, and the Builders/Steps - use "LockIDs", which are still instances of MasterLock and - SlaveLock. The real Locks are instances of the new RealMasterLock - and RealSlaveLock classes. - * buildbot/master.py (BotMaster.getLockByID): new method to - convert LockIDs into real Locks. - * buildbot/process/base.py (Build.startBuild): convert LockIDs - into real Locks before building - * buildbot/process/step.py (BuildStep.startStep): same - * buildbot/test/test_locks.py (Locks.testLock1a): add a test which - exercises the problem - - - * docs/buildbot.texinfo (Scheduler Types): give a few hints about - what Schedulers are available - - * buildbot/scheduler.py (Nightly): add new Scheduler based upon - work by Dobes Vandermeer and hacked mercilessly by me. This offers - 'cron'-style build scheduling at certain times of day, week, - month, or year. - * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it - - * buildbot/scheduler.py (Scheduler): change fileIsImportant - handling: treat self.fileIsImportant more as an attribute that - contains a callable than as a method. If the attribute is None, - don't call it and assume all filenames are important. It is still - possible to provide a fileIsImportant method in a subclass, - however. - (AnyBranchScheduler): handle fileIsImportant=None, previously it - was broken - * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2): - test using AnyBranchScheduler with fileIsImportant=None - -2005-11-24 Brian Warner <warner@lothar.com> - - * buildbot/test/test_config.py (StartService): don't claim a fixed - port number, instead set slavePort=0 on the first pass, figure out - what port was allocated, then switch to a config file that uses - the allocated port. - - * buildbot/master.py (BuildMaster.loadConfig): close the old - slaveport before opening the new one, because unit tests might - replace slavePort=0 with the same allocated portnumber, and if we - don't wait for the old port to close first, we get a "port already - in use" error. There is a tiny race condition here, but the only - threat is from other programs that bind (statically) to the same - port number we happened to be allocated, and only if those - programs use SO_REUSEADDR, and only if they get control in between - reactor turns. - - * Makefile (TRIALARGS): update to handle Twisted > 2.1.0 - - * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all - deleted ChangeSources before adding any new ones - * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix - compare_attrs, to make sure that a config-file reload does not - unnecessarily replace an unmodified ChangeSource instance - * buildbot/test/test_config.py (ConfigTest.testSources): update - - * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to - mean "don't build anything", and add a warning if it gets used - because it isn't actually useful. - - * contrib/svn_buildbot.py: update example usage to match the port - number that gets used by the PBChangeSource - * buildbot/scripts/sample.cfg: add example of PBChangeSource - -2005-11-22 Brian Warner <warner@lothar.com> - - * NEWS: start collecting items for next release - - * buildbot/process/step.py (SVN.computeSourceRevision): assume - revisions are strings - (P4Sync.computeSourceRevision): same - - * buildbot/status/html.py (StatusResourceBuild.body): add a link - to the Buildbot's overall status page - (StatusResourceBuilder.body): same - -2005-11-15 Brian Warner <warner@lothar.com> - - * buildbot/master.py (BuildMaster.loadConfig): serialize the - config-file loading, specifically to make sure old StatusTargets - are finished shutting down before new ones start up (thus - resolving a bug in which changing the Waterfall object would fail - because both new and old instances were claiming the same - listening port). Also load new Schedulers after all the new - Builders are set up, in case they fire off a new build right away. - * buildbot/test/test_config.py (StartService): test it - - * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add - the branch name to the mail body - - * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this. - Without it, a config-file reload fails to update an existing - PBChangeSource. - * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add - username/passwd to compare_attrs, for the same reason - * buildbot/status/html.py (Waterfall): add favicon to - compare_attrs, same reason - -2005-11-05 Brian Warner <warner@lothar.com> - - * buildbot/scripts/tryclient.py (createJobfile): stringify the - baserev before stuffing it in the jobfile. This resolves problems - under SVN (and probably Arch) where revisions are expressed as - numbers. I'm inclined to use string-based revisions everywhere in - the future, but this fix should be safe for now. Thanks to Steven - Walter for the patch. - - * buildbot/changes/changes.py (ChangeMaster.saveYourself): use - binary mode when opening pickle files, to make windows work - better. Thanks to Dobes Vandermeer for the catch. - * buildbot/status/builder.py (BuildStatus.saveYourself): same - (BuilderStatus.getBuildByNumber): same - (Status.builderAdded): same - * buildbot/master.py (BuildMaster.loadChanges): same - - * buildbot/util.py (Swappable): delete unused leftover code - - * buildbot/process/step.py (SVN): when building on a non-default - branch, add the word "[branch]" to the VC step's description, so - it is obvious that we're not building the usual stuff. Likewise, - when we are building a specific revision, add the text "rNNN" to - indicate what that revision number is. Thanks to Brad Hards and - Nathaniel Smith for the suggestion. - (Darcs.startVC): same - (Arch.startVC): same - (Bazaar.startVC): same - - * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly - typo, caught by Mark Dillavou, closes SF#1216636. - - * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes - about a test to add some day - - * docs/examples/twisted_master.cfg: update: bot1 can now handle - the 'full-2.3' build, and the 'reactors' build is now run under - python-2.4 because the buildslave no longer has gtk/etc bindings - for earlier versions. - -2005-11-03 Brian Warner <warner@lothar.com> - - * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new - method, takes an IBuildStatus and rebuilds it. It might make more - sense to add this to IBuildControl instead, but that instance goes - away completely once the build has finished, and resubmitting - builds can take place weeks later. - * buildbot/process/builder.py (BuilderControl.resubmitBuild): same - * buildbot/status/html.py (StatusResourceBuild): also stash an - IBuilderControl so we can use resubmitBuild. - (StatusResourceBuild.body): render "resubmit" button if we can. - Also add hrefs for each BuildStep - (StatusResourceBuild.rebuild): add action for "resubmit" button - (StatusResourceBuilder.getChild): give it an IBuilderControl - - * buildbot/status/builder.py (Status.getURLForThing): change the - URL for BuildSteps to have a "step-" prefix, so the magic URLs - that live as targets of buttons like "stop" and "rebuild" can't - collide with them. - * buildbot/status/builder.py (Status.getURLForThing): same - * buildbot/status/html.py (StatusResourceBuild.getChild): same - (StepBox.getBox): same - * buildbot/test/test_web.py (GetURL): same - (Logfile): same - - * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL - exclusivity checks after Source.__init__ upcall, so misspelled - arguments will be reported more usefully - (Darcs.__init__): same - -2005-10-29 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.cfg: don't double-fire the 'quick' - builder. Move the Try scheduler off to a separate port. - -2005-10-27 Brian Warner <warner@lothar.com> - - * buildbot/clients/gtkPanes.py - (TwoRowClient.remote_builderRemoved): disappearing Builders used - to cause the app to crash, now they don't. - - * buildbot/clients/debug.py: display the buildmaster's location - in the window's title bar - -2005-10-26 Brian Warner <warner@lothar.com> - - * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs - in case they have spaces or whatnot. Patch from Dobes Vandermeer. - * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it - - * buildbot/status/html.py (td): put a single non-breaking space - inside otherwise empty <td> elements, as a workaround for buggy - browsers which would optimize them away (along with any associated - styles, like the kind that create the waterfall grid borders). - Patch from Frerich Raabe. - - * buildbot/process/step_twisted.py (Trial): expose the trialMode= - argv-list as an argument, defaulting to ["-to"], which is - appropriate for the Trial that comes with Twisted-2.1.0 and - earlier. The Trial in current Twisted SVN wants - ["--reporter=bwverbose"] instead. Also expose trialArgs=, which - defaults to an empty list. - * buildbot/process/process_twisted.py (TwistedTrial.trialMode): - match it, now that trialMode= is a list instead of a single string - - * buildbot/__init__.py (version): bump to 0.7.0+ while between - releases - * docs/buildbot.texinfo: same - -2005-10-24 Brian Warner <warner@lothar.com> - - * buildbot/__init__.py (version): Releasing buildbot-0.7.0 - * docs/buildbot.texinfo: set version number to match - -2005-10-24 Brian Warner <warner@lothar.com> - - * README: update for 0.7.0 - * NEWS: same - * docs/buildbot.texinfo: move the freshcvs stuff out of the README - - * buildbot/clients/debug.glade: add 'branch' box to fake-commit - * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't - send the branch= argument unless the user really provided one, to - retain compatibility with older buildmasters that don't accept - that argument. - * buildbot/master.py (DebugPerspective.perspective_fakeChange): - same - - * docs/buildbot.texinfo: update lots of stuff - - * buildbot/scripts/runner.py (sendchange): add a --branch argument - to the 'buildbot sendchange' command - * buildbot/clients/sendchange.py (Sender.send): same - * buildbot/changes/pb.py (ChangePerspective): same - * buildbot/test/test_changes.py (Sender.testSender): test it - - * buildbot/process/step.py (SVN.__init__): change 'base_url' and - 'default_branch' argument names to 'baseURL' and 'defaultBranch', - for consistency with other BuildStep arguments that use camelCase. - Well, at least more of them use camelCase (like flunkOnWarnings) - than don't.. I wish I'd picked one style and stuck with it - earlier. Annoying, but it's best done before the release, since - these arguments didn't exist at all in 0.6.6 . - (Darcs): same - * buildbot/test/test_vc.py (SVN.testCheckout): same - (Darcs.testPatch): same - * docs/buildbot.texinfo (SVN): document the change - (Darcs): same, add some build-on-branch docs - * docs/examples/twisted_master.cfg: match change - - * buildbot/process/step.py (BuildStep): rename - slaveVersionNewEnough to slaveVersionIsOlderThan, because that's - how it is normally used. - * buildbot/test/test_steps.py (Version.checkCompare): same - - * buildbot/process/step.py (CVS.startVC): refuse to build - update/copy -style builds on a non-default branch with an old - buildslave (<=0.6.6) that doesn't know how to do it properly. The - concern is that it will do a VC 'update' in an existing tree when - it is supposed to be switching branches (and therefore clobbering - the tree to do a full checkout), thus building the wrong source. - This used to be a warning, but I think the confusion it is likely - to cause warrants making it an error. - (SVN.startVC): same, also make mode=export on old slaves an error - (Darcs.startVC): same - (Git.startVC): improve error message for non-Git-enabled slaves - (Arch.checkSlaveVersion): same. continue to emit a warning when a - specific revision is built on a slave that doesn't pay attention - to args['revision'], because for slowly-changing trees it will - probably do the right thing, and because we have no way to tell - whether we're asking it to build the most recent version or not. - * buildbot/interfaces.py (BuildSlaveTooOldError): new exception - - * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert - that 'master' is in host:portnum format, to catch errors sooner - -2005-10-23 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (ProcessDocs.createSummary): - when creating the list of warning messages, include the line - immediately after each WARNING: line, since that's usually where - the file and line number wind up. - - * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a - TryScheduler - - * NEWS: update - -2005-10-22 Brian Warner <warner@lothar.com> - - * buildbot/status/html.py (HtmlResource): incorporate valid-HTML - patch from Brad Hards - * buildbot/status/classic.css: same - * buildbot/test/test_web.py (Waterfall): match changes - - * buildbot/test/test_steps.py (BuildStep.setUp): set - nextBuildNumber so the test passes - * buildbot/test/test_status.py (MyBuilder): same - - * buildbot/status/html.py (StatusResourceBuild.body): revision - might be numeric, so stringify it before html-escapifying it - (CurrentBox.getBox): add a "waiting" state, and show a countdown - timer for the upcoming build - * buildbot/status/classic.css: add background-color attributes for - offline/waiting/building classes - - * buildbot/status/builder.py (BuildStatus): derive from - styles.Versioned, fix upgrade of .sourceStamp attribute. Also set - the default (i.e. unknown) .slavename to "???" instead of None, - since even unknown slavenames need to be printed eventually. - (BuilderStatus): also derive from styles.Versioned . More - importantly, determine .nextBuildNumber at creation/unpickling - time by scanning the directory of saved BuildStatus instances and - choosing one larger than the highest-numbered one found. This - should fix the problem where random errors during upgrades cause - the buildbot to forget about earlier builds. .nextBuildNumber is - no longer stored in the pickle. - (Status.builderAdded): if we can't unpickle the BuilderStatus, - at least log the error. Also call Builder.determineNextBuildNumber - once the basedir is set. - - * buildbot/master.py (BuildMaster.loadChanges): do - styles.doUpgrade afterwards, in case I decide to make Changes - derived from styles.Versioned some day and forget to make this - change later. - - - * buildbot/test/test_runner.py (Options.testForceOptions): skip - when running under older pythons (<2.3) in which the shlex module - doesn't have a 'split' function. - - * buildbot/process/step.py (ShellCommand.start): make - errorMessages= be a list of strings to stuff in the log before the - command actually starts. This makes it easier to flag multiple - warning messages, e.g. when the Source steps have to deal with an - old buildslave. - (CVS.startVC): handle slaves that don't handle multiple branches - by switching into 'clobber' mode - (SVN.startVC): same. Also reject branches without base_url - (Darcs.startVC): same. Also reject revision= in older slaves - (Arch.checkSlaveVersion): same (just the multiple-branches stuff) - (Bazaar.startVC): same, and test for baz separately than for arch - - * buildbot/slave/commands.py (cvs_ver): document new features - - * buildbot/process/step.py (BuildStep.slaveVersion): document it - (BuildStep.slaveVersionNewEnough): more useful utility method - * buildbot/test/test_steps.py (Version): start testing it - - * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that - the 'force' command requires python2.3, for the shlex.split method - - * docs/examples/twisted_master.cfg: remove old freshcvs stuff, - since we don't use it anymore. The Twisted buildbot uses a - PBChangeSource now. - -2005-10-21 Brian Warner <warner@lothar.com> - - * buildbot/process/process_twisted.py: rework all BuildFactory - classes to take a 'source' step as an argument, instead of - building up the SVN instance in the factory. - * docs/examples/twisted_master.cfg: enable build-on-branch by - providing a base_url and default_branch - - * buildbot/status/words.py (IrcStatusBot.command_FORCE): add - control over --branch and --revision, not that they are always - legal to provide - * buildbot/status/html.py (StatusResourceBuilder.force): same - (StatusResourceBuild.body): display SourceStamp components - - * buildbot/scripts/runner.py (ForceOptions): option parser for the - IRC 'force' command, so it can be shared with an eventual - command-line-tool 'buildbot force' mode. - * buildbot/test/test_runner.py (Options.testForceOptions): test it - -2005-10-20 Brian Warner <warner@lothar.com> - - * buildbot/status/mail.py (MailNotifier.buildMessage): reformat - - * docs/examples/twisted_master.cfg: update to use Schedulers - - * buildbot/scripts/sample.cfg: update with Schedulers - - * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new - method specifically for use by HTML "force build" button and the - IRC "force" command. Raises an immediate error if there are no - slaves available. - (IBuilderControl.requestBuild): make this just submit a build, not - try to check for existing slaves or set up any when-finished - Deferreds or anything. - * buildbot/process/builder.py (BuilderControl): same - * buildbot/status/html.py (StatusResourceBuilder.force): same - * buildbot/status/words.py (IrcStatusBot.command_FORCE): same - * buildbot/test/test_slaves.py: same - * buildbot/test/test_web.py: same - -2005-10-19 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.cfg: re-sync with reality: bring - back python2.2 tests, turn off OS-X threadedselect-reactor tests - -2005-10-18 Brian Warner <warner@lothar.com> - - * buildbot/status/html.py: provide 'status' argument to most - StatusResourceFOO objects - (StatusResourceBuild.body): href-ify the Builder name, add "Steps - and Logfiles" section to make the Build page into a more-or-less - comprehensive source of status information about the build - - * buildbot/status/mail.py (MailNotifier): include the Build's URL - * buildbot/status/words.py (IrcStatusBot.buildFinished): same - -2005-10-17 Brian Warner <warner@lothar.com> - - * buildbot/process/process_twisted.py (TwistedTrial): update Trial - arguments to accomodate Twisted >=2.1.0 . I will have to figure - out what to do about other projects: the correct options for - recent Twisteds will not work for older ones. - -2005-10-15 Brian Warner <warner@lothar.com> - - * buildbot/status/builder.py (Status.getURLForThing): add method - to provide a URL for arbitrary IStatusFoo objects. The idea is to - use this in email/IRC status clients to make them more useful, by - providing the end user with hints on where to learn more about the - object being reported on. - * buildbot/test/test_web.py (GetURL): tests for it - -2005-10-14 Brian Warner <warner@lothar.com> - - * buildbot/test/test_config.py (ConfigTest._testSources_1): oops, - fix bug resulting from deferredResult changes - -2005-10-13 Brian Warner <warner@lothar.com> - - * buildbot/test/test_changes.py: remove use of deferredResult - * buildbot/test/test_config.py: same - * buildbot/test/test_control.py: same - * buildbot/test/test_status.py: same - * buildbot/test/test_vc.py: this is the only remaining use, since - it gets used at module level. This needs to be replaced by some - sort of class-level run-once routine. - - * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo - - * lots: implement multiple slaves per Builder, which means multiple - current builds per Builder. Some highlights: - * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple - of (state,currentBuilds) instead of (state,currentBuild) - (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild() - (IBuildStatus.getSlavename): new method, so you can tell which - slave got used. This only gets set when the build completes. - (IBuildRequestStatus.getBuilds): new method - - * buildbot/process/builder.py (SlaveBuilder): add a .state - attribute to track things like ATTACHING and IDLE and BUILDING, - instead of.. - (Builder): .. the .slaves attribute here, which has been turned - into a simple list of available slaves. Added a separate - attaching_slaves list to track ones that are not yet ready for - builds. - (Builder.fireTestEvent): put off the test-event callback for a - reactor turn, to make tests a bit more consistent. - (Ping): cleaned up the slaveping a bit, now it disconnects if the - ping fails due to an exception. This needs work, I'm worried that - a code error could lead to a constantly re-connecting slave. - Especially since I'm trying to move to a distinct remote_ping - method, separate from the remote_print that we currently use. - (BuilderControl.requestBuild): return a convenience Deferred that - provides an IBuildStatus when the build finishes. - (BuilderControl.ping): ping all connected slaves, only return True - if they all respond. - - * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to - reconnect when we shut down. - - * buildbot/status/builder.py: implement new methods, convert - one-build-at-a-time methods to handle multiple builds - * buildbot/status/*.py: do the same in all default status targets - * buildbot/status/html.py: report the build's slavename in the - per-Build page, report all buildslaves on the per-Builder page - - * buildbot/test/test_run.py: update/create tests - * buildbot/test/test_slaves.py: same - * buildbot/test/test_scheduler.py: remove stale test - - * docs/buildbot.texinfo: document the new builder-specification - 'slavenames' parameter - -2005-10-12 Brian Warner <warner@lothar.com> - - * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not - report failure correctly, causing Dependent builds to run when - they shouldn't have. - * buildbot/status/builder.py (BuildSetStatus): same - * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it - (Set.testSuccess): test the both-pass case too - * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail): - fix this test: it was ending too early, masking the failure before - (Logger): specialized StatusReceiver to make sure the dependent - builds aren't even started, much less completed. - -2005-10-07 Brian Warner <warner@lothar.com> - - * buildbot/slave/bot.py (SlaveBuilder.activity): survive - bot.SlaveBuilder being disowned in the middle of a build - - * buildbot/status/base.py (StatusReceiverMultiService): oops, make - this inherit from StatusReceiver. Also upcall in __init__. This - fixes the embarrasing crash when the new buildSetSubmitted method - is invoked and Waterfall/etc don't implement their own. - * buildbot/test/test_run.py: add a TODO note about a test to catch - just this sort of thing. - - * buildbot/process/builder.py (Builder.attached): remove the - already-attached warning, this situation is normal. Add some - comments explaining it. - -2005-10-02 Brian Warner <warner@lothar.com> - - * buildbot/changes/maildir.py (Maildir.start): Tolerate - OverflowError when setting up dnotify, because some 64-bit systems - have problems with signed-vs-unsigned constants and trip up on the - DN_MULTISHOT flag. Patch from Brad Hards. - -2005-09-06 Fred Drake <fdrake@users.sourceforge.net> - - * buildbot/process/step.py (BuildStep, ShellCommand): Add - progressMetrics, description, descriptionDone to the 'parms' list, - and make use the 'parms' list from the implementation class - instead of only BuildStep to initialize the parameters. This - allows buildbot.process.factory.s() to initialize all the parms, - not just those defined in directly by BuildStep. - -2005-09-03 Brian Warner <warner@lothar.com> - - * NEWS: start adding items for the next release - - * docs/examples/twisted_master.cfg: (sync with reality) turn off - python2.2 tests, change 'Quick' builder to only use python2.3 - -2005-09-02 Fred Drake <fdrake@users.sourceforge.net> - - * buildbot/status/html.py (StatusResourceBuilder.body): only show - the "Ping Builder" button if the build control is available; the - user sees an exception otherwise - - * docs/buildbot.texinfo (PBChangeSource): fix a typo - -2005-09-01 Brian Warner <warner@lothar.com> - - * buildbot/interfaces.py (IBuilderStatus.getState): update - signature, point out that 'build' can be None - (IBuildStatus.getETA): point out ETA can be none - - * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA - being None - * buildbot/status/words.py (IrcStatusBot.emit_status): same - -2005-08-31 Brian Warner <warner@lothar.com> - - * buildbot/status/base.py (StatusReceiver.builderChangedState): - update to match correct signature: removed 'eta' argument - * buildbot/status/mail.py (MailNotifier.builderChangedState): same - -2005-08-30 Brian Warner <warner@lothar.com> - - * buildbot/status/builder.py (LogFile): remove the assertion that - blows up when you try to overwrite an existing logfile, instead - just emit a warning. This case gets hit when the buildmaster is - killed and doesn't get a chance to write out the serialized - BuilderStatus object, so the .nextBuildNumber attribute gets out - of date. - - * buildbot/scripts/runner.py (sendchange): add --revision_file to - the 'buildbot sendchange' arguments, for the Darcs context file - * docs/buildbot.texinfo (sendchange): document it - - * buildbot/status/html.py: add pending/upcoming builds to CurrentBox - * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method - (IStatus.getSchedulers): new method - * buildbot/status/builder.py (BuilderStatus): track pendingBuilds - (Status.getSchedulers): implement - * buildbot/process/builder.py (Builder): maintain - BuilderStatus.pendingBuilds - * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method - (TryBase.addChange): Try schedulers should ignore Changes - - * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir - for 'try' on CVS/SVN - * buildbot/test/test_runner.py (Try.testGetTopdir): test case - - * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try' - report status properly. - (Try.createJob): implement unique buildset IDs - - * buildbot/status/client.py (StatusClientPerspective): add a - perspective_getBuildSets method for the benefit of jobdir-style - 'try'. - * docs/buildbot.texinfo (try): more docs - * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets): - new test case - -2005-08-18 Brian Warner <warner@lothar.com> - - * buildbot/scripts/tryclient.py (Try): make 'try' status reporting - actually work. It's functional but still kind of clunky. Also, it - only works with the pb-style.. needs to be made to work with the - jobdir-style too. - - * buildbot/status/client.py (RemoteBuildSet): new class - (RemoteBuildRequest): same - (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild - object, not the internal BuildStatus object. - (RemoteBuild.remote_subscribe): new method to subscribe to builds - outside of the usual buildStarted() return value. - (BuildSubscriber): support class for RemoteBuild.remote_subscribe - - * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly - (Try_Userpass_Perspective.perspective_try): return a remotely - usable BuildSetStatus object - - * buildbot/interfaces.py (IBuildStatus): remove obsolete - isStarted()/waitUntilStarted() - -2005-08-16 Brian Warner <warner@lothar.com> - - * buildbot/status/builder.py: implement IBuildSetStatus and - IBuildRequestStatus, wire them into place. - * buildbot/buildset.py: same. Add ID, move wait-until-finished - methods into the BuildSetStatus object. - * buildbot/interfaces.py: same - (IStatus.getBuildSets): new method to get pending BuildSets - (IStatusReceiver.buildsetSubmitted): new method which hears about - new BuildSets - * buildbot/master.py (BuildMaster.submitBuildSet): same - * buildbot/process/base.py (BuildRequest): same, replace - waitUntilStarted with subscribe/unsubscribe - * buildbot/process/builder.py (BuilderControl.forceBuild): use - subscribe instead of waitUntilStarted - * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub - for new method - * buildbot/status/client.py (StatusClientPerspective.builderRemoved): - same - * buildbot/test/test_buildreq.py: update for new code - * buildbot/test/test_control.py (Force.testRequest): same - - - * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision - for Darcs to not use the tempfile module, so it works under - python-2.2 too. We really didn't need the full cleverness of that - module, since the slave has exclusive control of its own builddir. - -2005-08-15 Brian Warner <warner@lothar.com> - - * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try' - for CVS trees. It doesn't work for non-trunk branches, - unfortunately. - * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the - branch test - - * Makefile: make it easier to test against python2.2 - - * buildbot/test/test_vc.py (VCBase.tearDown): provide for - tearDown2, so things like Arch can unregister archives as they're - shutting down. The previous subclass-override-tearDown technique - resulted in a nested maybeWait() and test failures under - Twisted-1.3.0 - - * buildbot/scripts/tryclient.py (getSourceStamp): extract branches - where we can (Arch), add a branch= argument to set the branch used - when we can't - (BazExtractor): extract the branch too - (TlaExtractor): same - * buildbot/scripts/runner.py (TryOptions): add --branch - * docs/buildbot.texinfo (try): document --branch/try_branch - - * buildbot/slave/commands.py (Darcs): implement get-revision for - Darcs, so that 'try' will work. This requires the tempfile module - from python-2.3 . - - * buildbot/test/test_vc.py: rewrite tests, getting better coverage - of revisions, branches, and 'try' in the process. - -2005-08-11 Brian Warner <warner@lothar.com> - - * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix - this, it got broken at some point in the last few releases - * buildbot/status/words.py (IrcBuildRequest): reply was broken - (IrcStatusBot.emit_status): handle new IBuilderStatus.getState, - specifically the removal of ETA information from the tuple - - * buildbot/locks.py: use %d for id() instead of %x, avoid a silly - warning message - - * docs/buildbot.texinfo (try): document both --builder and - 'try_builders' in .buildbot/options - * buildbot/scripts/runner.py (TryOptions): add --builder, - accumulate the values into opts['builders'] - * buildbot/scripts/tryclient.py (Try.__init__): set builders - * buildbot/test/test_runner.py (Try): add some quick tests to make - sure 'buildbot try --options' and .buildbot/options get parsed - * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass): - use --builder control - - * docs/buildbot.texinfo (try): add --port argument to PB style - - * buildbot/scripts/tryclient.py (SourceStampExtractor): return an - actual SourceStamp. Still need to extract a branch name, somehow. - (Try): finish implementing the try client side, still need a UI - for specifying which builders to use - (Try.getopt): factor our options/config-file reading - * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass): - test it - * buildbot/test/test_vc.py: match SourceStampExtractor change - - * buildbot/scripts/runner.py (Options.opt_verbose): --verbose - causes the twisted log to be sent to stderr - - * buildbot/scheduler.py (Try_Userpass): implement the PB style - -2005-08-10 Brian Warner <warner@lothar.com> - - * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir - style is 90% done, still missing status reporting or waiting for - the buildsets to finish, and it is completely untested. - - * buildbot/trybuild.py: delete file, move contents to .. - * buildbot/scripts/tryclient.py (getSourceStamp): .. here - * buildbot/test/test_vc.py: match the move - - * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style - of the TryScheduler, no buildsetID or status-tracking support yet - * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it - - * buildbot/changes/maildir.py (Maildir.setBasedir): make it - possible to set the basedir after __init__ time, so it is easier - to use as a Service-child of the BuildMaster instance - - * buildbot/changes/maildirtwisted.py (MaildirService): make a form - that delivers messages to its Service parent instead of requiring - a subclass to be useful. This turns out to be much easier to build - unit tests around. - - * buildbot/scripts/tryclient.py (createJob): utility code to - create jobfiles, will eventually be used by 'buildbot try' - -2005-08-08 Brian Warner <warner@lothar.com> - - * docs/buildbot.texinfo (try): add docs on the - as-yet-unimplemented Try scheduler - - * buildbot/test/test_buildreq.py: move Scheduling tests out to .. - * buildbot/test/test_scheduler.py: .. here - (Scheduling.testTryJobdir): add placeholder test for 'try' - - * buildbot/test/test_status.py (Log.testMerge3): update to match new - addEntry merging (>=chunkSize) behavior - (Log.testConsumer): update to handle new callLater(0) behavior - - * buildbot/test/test_web.py: rearrange tests a bit, add test for - both the MAX_LENGTH bugfix and the resumeProducing hang. - - * buildbot/status/builder.py (LogFileProducer.resumeProducing): - put off the actual resumeProducing for a moment with - reactor.callLater(0). This works around a twisted-1.3.0 bug which - causes large logfiles to hang midway through. - - * buildbot/process/step.py (BuildStep.addCompleteLog): break the - logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH - and to improve memory usage when streaming the file out to a web - browser. - * buildbot/status/builder.py (LogFile.addEntry): change > to >= to - make this work cleanly - -2005-08-03 Brian Warner <warner@lothar.com> - - * buildbot/trybuild.py: new file for 'try' utilities - (getSourceStamp): run in a tree, find out the baserev+patch - * buildbot/test/test_vc.py (VCBase.do_getpatch): test it, - implemented for SVN and Darcs, still working on Arch. I don't know - how to make CVS work yet. - - * docs/buildbot.texinfo: document the 'buildbot' command-line - tool, including the not-yet-implemented 'try' feature, and the - in-flux .buildbot/ options directory. - -2005-07-20 Brian Warner <warner@lothar.com> - - * buildbot/locks.py: added temporary id() numbers to Lock - descriptions, to track down a not-really-sharing-the-Lock bug - - * buildbot/test/runutils.py: must import errno, cut-and-paste bug - - * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn): - needed for python2.2 compatibility - * buildbot/test/test_vc.py: python2.2 compatibility: generators - are from the __future__ - -2005-07-19 Brian Warner <warner@lothar.com> - - * buildbot/master.py (BuildMaster.loadConfig): give a better error - message when schedulers use unknown builders - - * buildbot/process/builder.py (Builder.compareToSetup): make sure - SlaveLock('name') and MasterLock('name') are distinct - - * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check - c['schedulers'] in such a way that we can actually accept - Dependent instances - * buildbot/test/test_config.py: check it - - * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add - utility method to *all* the Schedulers - (Periodic.listBuilderNames): same - - * docs/buildbot.texinfo (Interlocks): update chapter to match - reality - - * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks - to make sure that c['sources'], c['schedulers'], and c['status'] - are all lists of the appropriate objects, and that the Schedulers - all point to real Builders - * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add - 'listBuilderNames' utility method to support this - * buildbot/scheduler.py: implement the utility method - * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it - - * docs/buildbot.texinfo: add some @cindex entries - - * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID - if it wasn't already set: most tla commands will fail unless one - has been set. - (Arch.createRepository): and disable bazaar's revision cache, since - they cause test failures (the multiple repositories we create all - interfere with each other through the cache) - - * buildbot/test/test_web.py (WebTest): remove use of deferredResult, - bring it properly up to date with twisted-2.0 test guidelines - - * buildbot/master.py (BuildMaster): remove references to old - 'interlock' module, this caused a bunch of post-merge test - failures - * buildbot/test/test_config.py: same - * buildbot/process/base.py (Build): same - - * buildbot/test/test_slaves.py: stubs for new test case - - * buildbot/scheduler.py: add test-case-name tag - * buildbot/test/test_buildreq.py: same - - * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some - unnecessary init code - (Bot.remote_setBuilderList): match it - - * docs/buildbot.texinfo (@settitle): don't claim version 1.0 - - * buildbot/changes/mail.py (parseSyncmail): update comment - - * buildbot/test/test_slavecommand.py: disable Shell tests on - platforms that don't suport IReactorProcess - - * buildbot/status/builder.py (LogFile): remove the 't' mode from - all places where we open logfiles. It causes OS-X to open the file - in some weird mode that that prevents us from mixing reads and - writes to the same filehandle, which we depend upon to implement - _generateChunks properly. This change doesn't appear to break - win32, on which "b" and "t" are treated differently but a missing - flag seems to be interpreted as "t". - -2005-07-18 Brian Warner <warner@lothar.com> - - * buildbot/slave/commands.py (ShellCommand): overhaul - error-handling code, to try and make timeout/interrupt work - properly, and make win32 happier - * buildbot/test/test_slavecommand.py: clean up, stop using - reactor.iterate, add tests for timeout and interrupt - * buildbot/test/sleep.py: utility for a new timeout test - - * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility - code from the local-usebranches branch - -2005-07-17 Brian Warner <warner@lothar.com> - - * buildbot/process/process_twisted.py - (TwistedReactorsBuildFactory): change the treeStableTimer to 5 - minutes, to match the other twisted BuildFactories, and don't - excuse failures in c/qt/win32 reactors any more. - - * docs/examples/twisted_master.cfg: turn off the 'threadless' and - 'freebsd' builders, since the buildslaves have been unavailable - for quite a while - -2005-07-13 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py (VCBase.do_branch): test the new - build-on-branch feature - - * buildbot/process/step.py (Darcs.__init__): add base_url and - default_branch arguments, just like SVN - (Arch.__init__): note that the version= argument is really the - default branch name - - * buildbot/slave/commands.py (SourceBase): keep track of the - repository+branch that was used for the last checkout in - SRCDIR/.buildbot-sourcedata . If the contents of this file do not - match, we clobber the directory and perform a fresh checkout - rather than trying to do an in-place update. This should protect - us against trying to get to branch B by doing an update in a tree - obtained from branch A. - (CVS.setup): add CVS-specific sourcedata: root, module, and branch - (SVN.setup): same, just the svnurl - (Darcs.setup): same, just the repourl - (Arch.setup): same, arch coordinates (url), version, and - buildconfig. Also pull the buildconfig from the args dictionary, - which we weren't doing before, so the build-config was effectively - disabled. - (Arch.sourcedirIsUpdateable): don't try to update when we're - moving to a specific revision: arch can't go backwards, so it is - safer to just clobber the tree and checkout a new one at the - desired revision. - (Bazaar.setup): same sourcedata as Arch - - * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail): - use maybeWait, to work with twisted-1.3.0 and twcompat - (Dependencies.testRun_Pass): same - - * buildbot/test/test_vc.py: rearrange, cleanup - - * buildbot/twcompat.py: add defer.waitForDeferred and - utils.getProcessOutputAndValue, so test_vc.py (which uses them) - can work under twisted-1.3.0 . - - * buildbot/test/test_vc.py: rewrite. The sample repositories are - now created at setUp time. This increases the runtime of the test - suite considerably (from 91 seconds to 151), but it removes the - need for an offline tarball, which should solve a problem I've - seen where the test host has a different version of svn than the - tarball build host. The new code also validates that mode=update - really picks up recent commits. This approach will also make it - easier to test out branches, because the code which creates the VC - branches is next to the code which uses them. It will also make it - possible to test some change-notification hooks, by actually - performing a VC commit and watching to see the ChangeSource get - notified. - -2005-07-12 Brian Warner <warner@lothar.com> - - * docs/buildbot.texinfo (SVN): add branches example - * docs/Makefile (buildbot.ps): add target for postscript manual - - * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/ - * buildbot/test/test_locks.py: same - - * buildbot/process/step.py (Darcs): comment about default branches - - * buildbot/master.py (BuildMaster.loadConfig): don't look for - c['interlocks'] in the config file, complain if it is present. - Scan all locks in c['builders'] to make sure the Locks they use - are uniquely named. - * buildbot/test/test_config.py: remove old c['interlocks'] test, - add some tests to check for non-uniquely-named Locks - * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps, - since the unique-Lock validation code requires it now - - * buildbot/locks.py: fix test-case-name - - * buildbot/interlock.py: remove old file - -2005-07-11 Brian Warner <warner@lothar.com> - - * buildbot/test/test_interlock.py: rename to.. - * buildbot/test/test_locks.py: .. something shorter - - * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted - versions (after 2.0.1) changed internet.TCPClient to shut down the - connection in stopService. Change the code to handle this - gracefully. - - * buildbot/process/base.py (Build): handle whole-Build locks - * buildbot/process/builder.py (Builder.compareToSetup): same - * buildbot/test/test_interlock.py: make tests work - - * buildbot/process/step.py (BuildStep.startStep): complain if a - Step tries to claim a lock that's owned by its own Build - (BuildStep.releaseLocks): typo - - * buildbot/locks.py (MasterLock): use ComparableMixin so config - file reloads don't replace unchanged Builders - (SlaveLock): same - * buildbot/test/test_config.py (ConfigTest.testInterlocks): - rewrite to cover new Locks instead of old c['interlocks'] - * buildbot/test/runutils.py (RunMixin.connectSlaves): remember - slave2 too - - - * buildbot/test/test_dependencies.py (Dependencies.setUp): always - start the master and connect the buildslave - - * buildbot/process/step.py (FailingDummy.done): finish with a - FAILURE status rather than raising an exception - - * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to - stringify a BuildRequest.reason that is None - - * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished): - minor fix - * buildbot/status/builder.py (BuildSetStatus): implement enough to - allow scheduler.Dependent to work - * buildbot/buildset.py (BuildSet): set .reason and .results - - * buildbot/test/test_interlock.py (Locks.setUp): connect both - slaves, to make the test stop hanging. It still fails, of course, - because I haven't even started to implement Locks. - - * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility - - * docs/buildbot.texinfo (Build-Dependencies): redesign the feature - * buildbot/interfaces.py (IUpstreamScheduler): new Interface - * buildbot/scheduler.py (BaseScheduler): factor out common stuff - (Dependent): new class for downstream build dependencies - * buildbot/test/test_dependencies.py: tests (still failing) - - * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes - -2005-07-07 Brian Warner <warner@lothar.com> - - * buildbot/test/runutils.py (RunMixin): factored this class out.. - * buildbot/test/test_run.py: .. from here - * buildbot/test/test_interlock.py: removed old c['interlock'] tests, - added new buildbot.locks tests (which all hang right now) - * buildbot/locks.py (SlaveLock, MasterLock): implement Locks - * buildbot/process/step.py: claim/release per-BuildStep locks - - * docs/Makefile: add 'buildbot.html' target - - * buildbot/process/step.py (CVS.__init__): allow branch=None to be - interpreted as "HEAD", so that all VC steps can accept branch=None - and have it mean the "default branch". - - * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks - -2005-07-07 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.cfg: update to match current usage - - * docs/buildbot.texinfo (System Architecture): comment out the - image, it doesn't exist yet and just screws up the HTML manual. - -2005-07-05 Brian Warner <warner@lothar.com> - - * debian/.cvsignore: oops, missed one. Removing leftover file. - -2005-06-17 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py (VCSupport.__init__): svn --version - changed its output in 1.2.0, don't mistakenly think that the - subversion we find isn't capable of supporting our tests. - - * debian/*: remove the debian/ directory and its contents, to make - life easier for the proper Debian maintainer - * MANIFEST.in: same - * Makefile (release): same - -2005-06-07 Brian Warner <warner@lothar.com> - - * everything: create a distinct SourceStamp class to replace the - ungainly 4-tuple, let it handle merging instead of BuildRequest. - Changed the signature of Source.startVC to include the revision - information (instead of passing it through self.args). Implement - branches for SVN (now only Darcs/Git is missing support). Add more - Scheduler tests. - -2005-06-06 Brian Warner <warner@lothar.com> - - * everything: rearrange build scheduling. Create a new Scheduler - object (configured in c['schedulers'], which submit BuildSets to a - set of Builders. Builders can now use multiple slaves. Builds can - be run on alternate branches, either requested manually or driven - by changes. This changed some of the Status classes. Interlocks - are out of service until they've been properly split into Locks - and Dependencies. treeStableTimer, isFileImportant, and - periodicBuild have all been moved from the Builder to the - Scheduler. - (BuilderStatus.currentBigState): removed the 'waiting' and - 'interlocked' states, removed the 'ETA' argument. - -2005-05-24 Brian Warner <warner@lothar.com> - - * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3 - erroneously abandons the connection (in clientConnectionFailed) - for non-UserErrors, which means that if we lose the connection due - to a network problem or a timeout, we'll never try to reconnect. - Fix this by not upcalling to the buggy parent method. Note: - twisted-2.0 fixes this, but the function only has 3 lines so it - makes more sense to copy it than to try and detect the buggyness - of the parent class. Fixes SF#1207588. - - * buildbot/changes/changes.py (Change.branch): doh! Add a - class-level attribute to accomodate old Change instances that were - pickled before 0.6.5 (where .branch was added for new Changes). - This fixes the exception that occurs when you try to look at an - old Change (through asHTML). - - * buildbot/__init__.py (version): bump to 0.6.6+ while between - releases - -2005-05-23 Brian Warner <warner@lothar.com> - - * buildbot/__init__.py (version): release 0.6.6 - -2005-05-23 Brian Warner <warner@lothar.com> - - * NEWS: update for 0.6.6 release - * debian/changelog: same - - * buildbot/scripts/runner.py (start): put the basedir in sys.path - before starting: this was done by twistd back when we spawned it, - now that we're importing the pieces and running them in the - current process, we have to do it ourselves. This allows - master.cfg to import files from the same directory without - explicitly manipulating PYTHONPATH. Thanks to Thomas Vander - Stichele for the catch. - (Options.opt_version): Add a --version command (actually, just make - the existing --version command emit Buildbot's version too) - - * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second - fix to make this behave like other LogFiles, this time to handle - existing LogFiles on disk. (add the missing .upgrade method) - * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it - -2005-05-21 Brian Warner <warner@lothar.com> - - * buildbot/test/test_runner.py (Create.testMaster): match the - rawstring change in runner.py:masterTAC - - * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless - TwistedWords is installed - * buildbot/test/test_status.py: same, with TwistedMail - - * buildbot/master.py: remove old IRC/Waterfall imports (used by - some old, deprecated, and removed config keys). This should enable - you to use the base buildbot functionality with Twisted-2.0.0 when - you don't also have TwistedWeb and TwistedWords installed - -2005-05-20 Brian Warner <warner@lothar.com> - - * buildbot/scripts/runner.py (run): call sendchange(), not - do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5 - (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken. - (stop): don't wait for process to die when sending SIGHUP - (masterTAC): use a rawstring for basedir=, otherwise '\' in the - directory name gets interpreted, which you don't want - (slaveTAC): same - - * buildbot/__init__.py (version): bump to 0.6.5+ while between - releases - -2005-05-18 Brian Warner <warner@lothar.com> - - * buildbot/__init__.py (version): Releasing buildbot-0.6.5 - -2005-05-18 Brian Warner <warner@lothar.com> - - * README: update for 0.6.5 - * debian/changelog: same - - * buildbot/changes/changes.py: rename tag= to branch=, since - that's how we're using it, and my design for the upcoming "build a - specific branch" feature wants it. also, tag= was too CVS-centric - * buildbot/changes/mail.py (parseSyncmail): same - * buildbot/process/base.py (Build.isBranchImportant): same - * buildbot/test/test_mailparse.py (Test3.testMsgS4): same - * docs/buildbot.texinfo (Attributes of Changes): same - - * NEWS: update tag=, update for upcoming release - -2005-05-17 Brian Warner <warner@lothar.com> - - * buildbot/scripts/runner.py (stop): actually poll once per - second, instead of re-killing the poor daemon once per second. - Sleep briefly (0.1s) before the first poll, since there's a good - chance we can avoid waiting the full second if the daemon shuts - down quickly. Also remove the sys.exit() at the end. - (start): remove the unneighborly sys.exit() - - * Makefile: improve permission-setting to not kick Arch so badly - - * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a - default --keepalive=600, since it doesn't hurt very much, and it's - a hassle to discover that you need it. - * buildbot/test/test_runner.py (Create.testSlave): test it - - * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the - IRC bot about EXCEPTION - - * buildbot/status/client.py (PBListener): upcall more correctly - - * buildbot/process/base.py (Build.allStepsDone): if a step caused - an exception mark the overall build with EXCEPTION, not SUCCESS - - * buildbot/scripts/runner.py (makefile_sample): remove the leading - newline - * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall - * Makefile: update some release-related stuff - - * buildbot/slave/commands.py (ShellCommand.kill): if somehow this - gets called when there isn't actually an active process, just end - the Command instead of blowing up. I don't know how it gets into - this state, but the twisted win32 buildslave will sometimes hang, - and when it shakes its head and comes back, it thinks it's still - running a Command. The next build causes this command to be - interrupted, but the lack of self.process.pid breaks the interrupt - attempt. - - * NEWS: document changes since the last release - - * buildbot/scripts/runner.py (start): change 'buildbot start' to - look for Makefile.buildbot instead of a bare Makefile . The - 'buildbot start' does not install this file, so you have to - manually copy it if you want to customize startup behavior. - (createMaster): change 'buildbot master' command to create - Makefile.sample instead of Makefile, to create master.cfg.sample - instead of master.cfg (requiring you to copy it before the - buildmaster can be started). Both sample files are kept up to - date, i.e. they are overwritten if they have been changed. The - 'buildbot.tac' file is *not* overwritten, but if the new contents - don't match the old, a 'buildbot.tac.new' file is created and the - user is warned. This seems to be a much more sane way to handle - startup files. Also, don't sys.exit(0) when done, so we can run - unit tests against it. - (createSlave): same. Don't overwrite the sample info/ files. - * buildbot/scripts/sample.mk: remove. the contents were pulled - into runner.py, since they need to match the behavior of start() - * setup.py: same - * MANIFEST.in: same - - * docs/buildbot.texinfo (Launching the daemons): document it - * buildbot/test/test_runner.py (Create): test it - - * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a - version that can handle string-in-string tests, because otherwise - python-2.2 fails the tests. It'd be tremendous if Trial's test - took two strings under 2.2 too. - - * everything: fixed all deprecation warnings when running against - Twisted-2.0 . (at least all the ones in buildbot code, there are a - few that come from Twisted itself). This involved putting most of - the Twisted-version specific code in the new buildbot.twcompat - module, and creating some abstract base classes in - buildbot.changes.base and buildbot.status.base (which might be - useful anyway). __implements__ is a nuisance and requires an ugly - 'if' clause everywhere. - - * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second - delay before finishing the test: it seems that smtp.sendmail - doesn't hang up on the server, so we must wait a moment so it can - hang up on us. This removes the trial warning about an unclean - reactor. - -2005-05-16 Brian Warner <warner@lothar.com> - - * buildbot/process/step.py (Source): add 'retry' argument. It is a - tuple of (delay, repeats). - * buildbot/test/test_vc.py (Retry): test it - * docs/buildbot.texinfo (Source Checkout): document it - * buildbot/slave/commands.py (SourceBase): add 'retry' parameter. - (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in - doVCFull() are handled by re-trying the checkout (after a delay) - some number of times. - (ShellCommand._startCommand): make header lines easier to read - - * buildbot/test/test_web.py (WebTest.tearDown): factor out master - shutdown - (WebTest.test_logfile): make sure master gets shut down, silences - some "unclean reactor" test errors - - * buildbot/test/test_changes.py (Sender.tearDown): spin the - reactor once after shutdown, something in certain versions of - Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre - fails, svn-trunk is ok. - - * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a - second win32 error message - - * buildbot/test/test_run.py (Status.testSlave): be smarter about - validating the ETA, so the tests don't fail on slow systems - -2005-05-15 Brian Warner <warner@lothar.com> - - * buildbot/status/builder.py (HTMLLogFile): make this behave like - the new LogFile class, so upgrading works properly - (LogFileProducer.resumeProducing): survive resumeProducing after - we've exhausted the chunkGenerator - - * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML - logs too - * buildbot/test/test_status.py (Log.testAdd): validate hasContents - (Log.testUpgrade): same - - * docs/buildbot.texinfo (Maintenance): describe how to delete old - Builds and logs with a cron job. - - * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid - of the old non-offline LogFile, added code to upgrade these to - new-style contents-live-on-disk instances at load time (in a way - that doesn't invalidate the old Build pickles, so upgrading to - 0.6.5 is not a one-way operation). Got rid of everything related - to 'stub' builds. - (LogFile.__init__): create LogFiles with the parent step status, - the log's name, and a builder-relative filename where it can keep - the contents on disk. - (LogFile.hasContents): new method, clients are advised to call it - before getText or getChunks and friends. If it returns False, the - log's contents have been deleted and getText() will raise an - error. - (LogFile.getChunks): made it a generator - (LogFile.subscribeConsumer): new method, takes a Twisted-style - Consumer (except one that takes chunks instead of strings). This - enables streaming of very large logfiles without storing the whole - thing in memory. - (BuildStatus.generateLogfileName): create names like - 12-log-compile-output, with a _0 suffix if required to be unique - (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4 - or earlier) logfiles into new-style ones - (BuilderStatus): remove everything related to 'stub' builds. There - is now only one build cache, and we don't strip logs from old - builds anymore. - (BuilderStatus.getBuildByNumber): check self.currentBuild too, - since we no longer fight to keep it in the cache - - * buildbot/status/html.py (TextLog.render_GET): use a - ChunkConsumer to stream the log entries efficiently. - (ChunkConsumer): wrapper which consumes chunks and writes - formatted HTML. - - * buildbot/test/test_twisted.py (Parse.testParse): use a - LogFile-like object instead of a real one - - * buildbot/test/test_status.py (MyLog): handle new LogFile code - (Log.testMerge3): validate more merge behavior - (Log.testChunks): validate LogFile.getChunks - (Log.testUpgrade): validate old-style LogFile upgrading - (Log.testSubscribe): validate LogFile.subscribe - (Log.testConsumer): validate LogFile.subscribeConsumer - - * buildbot/interfaces.py (IStatusLogStub): remove - (IStatusLog.subscribeConsumer): new method - (IStatusLog.hasContents): new method - (IStatusLogConsumer): describes things passed to subscribeConsumer - - * buildbot/status/html.py (StepBox.getBox): Don't offer an href to - the log contents if it does not have any contents. - (StatusResourceBuildStep.body): same - (StatusResourceBuildStep.getChild): give a 404 for empty logs - -2005-05-14 Brian Warner <warner@lothar.com> - - * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second - timeouts to try and make the windows metabuildslave not hang - -2005-05-13 Mike Taylor <bear@code-bear.com> - - * buildbot/slave/commands.py (rmdirRecursive): added a check - to ensure the path passed into rmdirRecursive actually exists. - On win32 a non-existant path would generate an exception. - -2005-05-13 Brian Warner <warner@lothar.com> - - * buildbot/slave/commands.py (rmdirRecursive): replacement for - shutil.rmtree which behaves correctly on windows in the face of - files that you have to chmod before deleting. Thanks to Bear at - the OSAF for the routine. - (SourceBase.doClobber): use rmdirRecursive - -2005-05-12 Brian Warner <warner@lothar.com> - - * buildbot/status/builder.py (OfflineLogFile.getChunks): have this - method generate chunks instead of returning a big list. This - allows the same method to be used for both old LogFile and new - OfflineLogFile. - (OfflineLogFile.getText): use the generator - (OfflineLogFile.subscribe): same - * buildbot/status/html.py (TextLog.resumeProducing): same - * buildbot/interfaces.py (IStatusLog.getChunks): document it - - * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to - point out that OfflineLogFile does not currently work with - html.Waterfall . Fixing this is high-priority. - - * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since - apparently windows defaults to using stdout - - * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a - better message on failure so I can figure out the win32 problem - - * buildbot/slave/commands.py (ShellCommand._startCommand): update - log messages to include more useful copies of the command being - run, the argv array, and the child command's environment. - (Git.doVCFull): update cg-close usage, patch from Brandon Philips. - -2005-05-11 Brian Warner <warner@lothar.com> - - * setup.py: oops, install debug.glade so 'buildbot debugclient' - will actually work - * Makefile: update the deb-snapshot version - - * docs/buildbot.texinfo: move all .xhtml docs into a new - .texinfo-format document, adding a lot of material in the process. - This is starting to look like a real user's manual. Removed all - the Lore-related files: *.xhtml, *.css, template.tpl . - * docs/Makefile: simple makefile to run 'makeinfo' - * buildbot/scripts/sample.cfg: rearrange slightly - * MANIFEST.in: include .info and .textinfo, don't include *.xhtml - -2005-05-10 Brian Warner <warner@lothar.com> - - * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a - different name for the internal twistw module, handle it. - - * MANIFEST.in: we deleted plugins.tml, so stop shipping it - * setup.py: .. and stop trying to install it - - * buildbot/process/step.py (Git): added support for 'cogito' (aka - 'git'), the new linux kernel VC system (http://kernel.org/git/). - Thanks to Brandon Philips for the patch. - * buildbot/slave/commands.py (Git): same - -2005-05-06 Brian Warner <warner@lothar.com> - - * buildbot/status/builder.py (OfflineLogFile): replace the default - LogFile with a form that appends its new contents to a disk file - as they arrive. The complete log data is never kept in RAM. This - is the first step towards handling very large (100MB+) logfiles - without choking quite so badly. (The other half is - producer/consumer on the HTML pages). - (BuildStepStatus.addLog): use OfflineLogFile by default - (BuildStatus.getLogfileName): helper code to give the - OfflineLogFile a filename to work with - - * buildbot/test/test_status.py (Results.testAddResults): update - tests to handle new asserts - * buildbot/test/test_vc.py (Patch.doPatch): same - * buildbot/test/test_steps.py (BuildStep.setUp): same - -2005-05-05 Brian Warner <warner@lothar.com> - - * buildbot/scripts/runner.py (start): if there is no Makefile, - launch the app by importing twistd's internals and calling run(), - rather than spawning a new twistd process. This stands a much - better chance of working under windows. - (stop): kill the process with os.kill instead of spawning - /bin/kill, again to reduce the number of external programs which - windows might not have in the PATH. Also wait up to 5 seconds for - the process to go away, allowing things like 'buildbot stop; - buildbot start' to be reliable in the face of slow shutdowns. - - * buildbot/master.py (Dispatcher.__getstate__): remove old - .tap-related methods - (BuildMaster.__getstate__): same - (makeService): same - * buildbot/slave/bot.py (makeService): same - (Options.longdesc): same - * buildbot/scripts/runner.py: copy over some old mktap option text - - * buildbot/scripts/runner.py (masterTAC): stop using mktap. - 'buildbot master' now creates a buildbot.tac file, so there is no - longer a create-instance/save/reload sequence. mktap is dead, long - live twistd -y. - * buildbot/scripts/sample.mk: use twistd -y, not -f - * buildbot/test/test_config.py: remove mktap-based test - * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files - * README: don't reference mktap - - * docs/source.xhtml: document some of the attributes that Changes - might have - - * docs/steps.xhtml (Bazaar): document the Bazaar checkout step - - * general: merge in Change(tag=) patch from Thomas Vander Stichele. - [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2] - * buildbot/changes/changes.py (Change) - * buildbot/changes/mail.py (parseSyncmail) - * buildbot/test/test_mailparse.py (Test3.getNoPrefix) - (Test3.testMsgS5) - * buildbot/process/base.py (Build.isTagImportant) - (Build.addChange) - - -2005-05-04 Brian Warner <warner@lothar.com> - - * buildbot/clients/sendchange.py (Sender.send): tear down the PB - connection after sending the change, so that unit tests don't - complain about sockets being left around - - * buildbot/status/html.py (WaterfallStatusResource.body): fix - exception in phase=0 rendering - * buildbot/test/test_web.py (WebTest.test_waterfall): test it - - * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg - - * buildbot/master.py (BuildMaster.loadConfig): finally remove - deprecated config keys: webPortnum, webPathname, irc, manholePort, - and configuring builders with tuples. - * buildbot/test/test_config.py: stop testing compatibility with - deprecated config keys - * buildbot/test/test_run.py: same - -2005-05-03 Brian Warner <warner@lothar.com> - - * contrib/arch_buildbot.py: survive if there are no logfiles - (username): just use a string, os.getlogin isn't reliable - - * buildbot/scripts/runner.py (sendchange): oops, fix the command - so 'buildbot sendchange' actually works. The earlier test only - covered the internal (non-reactor-running) form. - - * contrib/arch_buildbot.py: utility that can run as an Arch hook - script to notify the buildmaster about changes - - * buildbot/scripts/runner.py (sendchange): new command to send a - change to a buildbot.changes.pb.PBChangeSource receiver. - * buildbot/test/test_changes.py (Sender): test it - - * buildbot/master.py (BuildMaster.startService): mark .readConfig - after any reading of the config file, not just when we do it in - startService. This makes some tests a bit cleaner. - - * buildbot/changes/pb.py: add some log messages - - * buildbot/process/base.py (Build.startBuild): fix a bug that - caused an exception when the build terminated in the very first - step. - (Build.stepDone): let steps return a status of EXCEPTION. This - terminates the build right away, and sets the build's overall - status to EXCEPTION too. - * buildbot/process/step.py (BuildStep.failed): return a status of - EXCEPTION when that is what has happened. - - * buildbot/process/step.py (Arch.computeSourceRevision): finally - implement this, allowing Arch-based projects to get precise - checkouts instead of always using the latest code - (Bazaar): create variant of Arch to let folks use baz instead of - tla. Requires a new buildslave too. - * buildbot/slave/commands.py (Arch): add 'revision' argument - (Bazaar): create variant of Arch that uses baz instead of tla. - Remove the code that extracts the archive name from the - register-archive output, since baz doesn't provide it, and require - the user provide both the archive name and its location. - * buildbot/test/test_vc.py (VC.testBazaar): added tests - -2005-05-02 Brian Warner <warner@lothar.com> - - * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'], - thanks to Nick Trout. - - * buildbot/scripts/runner.py (Maker.makefile): chmod before edit, - deals better with source Makefile coming from a read-only CVS - checkout. Thanks to Nick Trout for the catch. - - * buildbot/__init__.py (version): bump to 0.6.4+ while between - releases - -2005-04-28 Brian Warner <warner@lothar.com> - - * buildbot/__init__.py (version): Releasing buildbot-0.6.4 - - * debian/changelog: update for 0.6.4 - -2005-04-28 Brian Warner <warner@lothar.com> - - * README.w32: add a checklist of steps for getting buildbot - running on windows. - * MANIFEST.in: include it in the tarball - - * NEWS: update - - * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with - broken .tap files from 0.6.3 by getting rid of .services, - .namedServices, and .change_svc at load time. - -2005-04-27 Brian Warner <warner@lothar.com> - - * NEWS: update in preparation for new release - - * buildbot/test/test_config.py (Save.testSave): don't pull in - twisted.scripts.twistd, we don't need it and it isn't for windows - anyway. - - * buildbot/changes/changes.py (ChangeMaster.saveYourself): - accomodate win32 which can't do atomic-rename - -2005-04-27 Brian Warner <warner@lothar.com> - - * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some - timeouts to help the slow metabuildbot not flunk them so much - (Disconnect.testBuild3): same - (Disconnect.testBuild4): same - (Disconnect.testInterrupt): same - - * buildbot/master.py (BuildMaster.loadChanges): fix change_svc - setup, it was completely broken for new buildmasters (those which - did not have a 'change.pck' already saved. Thanks to Paul Warren - for catching this (embarrassing!) bug. - (Dispatcher.__getstate__): don't save our registered avatar - factories, since they'll be re-populated when the config file is - re-read. - (BuildMaster.__init__): add a dummy ChangeMaster, used only by - tests (since the real mktap-generated BuildMaster doesn't save - this attribute). - (BuildMaster.__getstate__): don't save any service children, - they'll all be re-populated when the config file is re-read. - * buildbot/test/test_config.py (Save.testSave): test for this - -2005-04-26 Brian Warner <warner@lothar.com> - - * buildbot/buildbot.png: use a new, smaller (16x16) icon image, - rendered with Blender.. looks a bit nicer. - * buildbot/docs/images/icon.blend: add the Blender file for it - - * buildbot/slave/commands.py (ShellCommand._startCommand): prepend - 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when - running under windows. This appears to be the best way to allow - BuildSteps to do something normal like 'trial -v buildbot.test' or - 'make foo' and still expect it to work. The idea is to make the - BuildSteps look as much like what a developer would type when - compiling or testing the tree by hand. This approach probably has - problems when there are spaces in the arguments, so if you've got - windows buildslaves, you'll need to pay close attention to your - commands. - - * buildbot/status/html.py (WaterfallStatusResource.body): add the - timezone to the timestamp column. - * buildbot/test/test_web.py (WebTest.test_waterfall): test it - - * buildbot/scripts/runner.py (loadOptions): do something sane for - windows, I think. We use %APPDATA%/buildbot instead of - ~/.buildbot, but we still search everywhere from the current - directory up to the root for a .buildbot/ subdir. The "is it under - $HOME" security test was replaced with "is it owned by the current - user", which is only performed under posix. - * buildbot/test/test_runner.py (Options.testFindOptions): update - tests to match. The "is it owned by the current user" check is - untested. The test has been re-enabled for windows. - - * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace - any "\n" in the expected output with the platform-specific line - separator. Make this separator "\r\n" on PTYs under unix, they - seem to do that and I don't know why - - * buildbot/test/test_runner.py (Options.optionsFile): disable on - windows for now, I don't know what ~/.buildbot/ should mean there. - - * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames): - win32 compatibility, don't use "/tmp" - (Basedir.testChangeBuilddir): remove more unixisms - -2005-04-26 Brian Warner <warner@lothar.com> - - * buildbot/test/test_control.py (Force.rmtree): python2.2 - compatibility, apparently its shutil.rmtree ignore_errors= - argument is ignored. - * buildbot/test/test_run.py (Run.rmtree): same - (RunMixin.setUp): same - - * buildbot/test/test_runner.py (make): python2.2 has os.sep but - not os.path.sep - - * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no - 'substring in string' operator, must use string.find(substr)!=-1 - * buildbot/test/test_vc.py (Patch.failUnlessIn): same - * buildbot/test/test_web.py (WebTest.failUnlessIn): same - - * buildbot/scripts/runner.py (loadOptions): add code to search for - ~/.buildbot/, a directory with things like 'options', containing - defaults for various 'buildbot' subcommands. .buildbot/ can be in - the current directory, your $HOME directory, or anywhere - inbetween, as long as you're somewhere inside your home directory. - (debugclient): look in ~/.buildbot/options for master and passwd - (statuslog): look in ~/.buildbot/options for 'masterstatus' - * buildbot/test/test_runner.py (Options.testFindOptions): test it - - * buildbot/status/client.py (makeRemote): new approach to making - IRemote(None) be None, which works under Twisted-2.0 - * buildbot/test/test_status.py (Client.testAdaptation): test it - - * buildbot/status/builder.py (Status.builderAdded): when loading a - pickled BuilderStatus in from disk, set its name after loading. - The config file might have changed its name (but not its - directory) while it wasn't looking. - - * buildbot/process/builder.py (Builder.attached): always return a - Deferred, even if the builder was already attached - * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it - -2005-04-25 Brian Warner <warner@lothar.com> - - * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a - category-related exception when announcing a build has finished - - * buildbot/status/html.py (StatusResourceChanges.body): oops, don't - reference no-longer-existent changemaster.sources - * buildbot/test/test_web.py (WebTest.test_waterfall): test for it - - * buildbot/__init__.py (version): bump to 0.6.3+ while between - releases - -2005-04-25 Brian Warner <warner@lothar.com> - - * buildbot/__init__.py (version): Releasing buildbot-0.6.3 - - * debian/changelog: update for 0.6.3 - -2005-04-25 Brian Warner <warner@lothar.com> - - * MANIFEST.in: make sure debug.glade is in the tarball - - * README (REQUIREMENTS): list necessary Twisted-2.0 packages - - * NEWS: update for the imminent 0.6.3 release - - * buildbot/status/html.py (HtmlResource.content): make the - stylesheet <link> always point at "buildbot.css". - (StatusResource.getChild): map "buildbot.css" to a static.File - containing whatever css= argument was provided to Waterfall() - (Waterfall): provide the "classic" css as the default. - * docs/waterfall.classic.css: move default CSS from here .. - * buildbot/status/classic.css: .. to here - - * MANIFEST.in: make sure classic.css is included in the tarball - * setup.py: and that it is installed too, under buildbot/status/ - - * buildbot/master.py (BuildMaster): oops, set .change_svc=None at - the module level, because buildbot.tap files from 0.6.2 don't have - it in their attribute dictionary. - - * buildbot/slave/bot.py (Bot.startService): make sure the basedir - really exists at startup, might save some confusion somewhere. - -2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org> - - * docs/waterfall.classic.css: - add a stylesheet that's almost the same as the "classic" - buildbot style - - * buildbot/status/builder.py: - add EXCEPTION as a result - this is a problem for the bot - maintainer, not a build problem for the changers - * buildbot/process/step.py: - use EXCEPTION instead of FAILURE for exceptions - * buildbot/status/html.py: - add build_get_class to get a class out of a build/buildstep - finish naming the classes - split out sourceNames to changeNames and builderNames so we - can style them separately - * docs/config.xhtml: - finish documenting classes as they are right now - - * buildbot/status/html.py: - name the classes as we agreed on IRC - * docs/config.xhtml: - and document them - - * buildbot/status/html.py: - same for cssclass->class_ - - * buildbot/status/html.py: - as decided on IRC, use class_ for the "class" attribute to not - conflict with the class keyword, and clean up the messy **{} stuff. - - * buildbot/status/mail.py: - put back "builders" argument, and fix docstring, because the - code *ignores* builders listed in this argument - - * buildbot/process/builder.py: - remove FIXME notes - category is now indeed a cvar of BuilderStatus - - * docs/config.xhtml: - describe the category argument for builders - - * buildbot/status/builder.py: - Fix a silly bug due to merging - - * buildbot/process/builder.py: - remove category from the process Builder ... - * buildbot/status/builder.py: - ... and add it to BuilderStatus instead. - Set category on unpickled builder statuses, they might not have it. - * buildbot/master.py: - include category when doing builderAdded - * buildbot/status/mail.py: - return None instead of self for builders we are not interested in. - * buildbot/test/test_run.py: - fix a bug due to only doing deferredResult on "dummy" waiting - * buildbot/test/test_status.py: - add checks for the Mail IStatusReceiver returning None or self - - * buildbot/status/html.py: - fix testsuite by prefixing page title with BuildBot - - * buildbot/status/builder.py: - have .category in builder status ... - * buildbot/process/builder.py: - ... and set it from Builder - * buildbot/status/html.py: - make .css a class variable - * buildbot/test/test_status.py: - write more tests to cover our categories stuff ... - * buildbot/status/mail.py: - ... and fix the bug that this uncovered - - * buildbot/changes/mail.py: - * buildbot/changes/pb.py: - * buildbot/master.py: - * buildbot/process/base.py: - * buildbot/process/factory.py: - * buildbot/process/interlock.py: - * buildbot/process/step.py: - * buildbot/process/step_twisted.py: - * buildbot/slave/commands.py: - * buildbot/status/builder.py: - * buildbot/status/client.py: - * buildbot/status/html.py: - * buildbot/status/mail.py: - * buildbot/status/progress.py: - * buildbot/test/test_changes.py: - * buildbot/test/test_config.py: - * buildbot/test/test_control.py: - * buildbot/test/test_interlock.py: - * buildbot/test/test_maildir.py: - * buildbot/test/test_mailparse.py: - * buildbot/test/test_run.py: - * buildbot/test/test_slavecommand.py: - * buildbot/test/test_status.py: - * buildbot/test/test_steps.py: - * buildbot/test/test_twisted.py: - * buildbot/test/test_util.py: - * buildbot/test/test_vc.py: - * buildbot/test/test_web.py: - * buildbot/util.py: - add test-case-name at the top of a whole set of files - - * buildbot/status/builder.py: - keep order of addition when getting builder names - * buildbot/status/words.py: - * buildbot/test/test_run.py: - add test for getBuilderNames - - * buildbot/process/base.py: - * buildbot/process/step.py: - * buildbot/status/builder.py: - * buildbot/status/html.py: - make buildbot css-able - replace the color code for purple with purple, don't understand - why it wasn't purple to start with - - * buildbot/status/words.py: - ok, so it doesn't look like BuilderStatus.remote is still valid. - Use what waterfall uses instead. - - * buildbot/interfaces.py: - * buildbot/status/builder.py: - * buildbot/status/html.py: - * buildbot/status/mail.py: - * buildbot/status/words.py: - * buildbot/test/test_run.py: - use categories everywhere and make it be a list. More sensible - for the future. Also make words actually respect this in - buildFinished. - - * buildbot/interfaces.py: - add category argument to getBuilderNames - * buildbot/process/builder.py: - * buildbot/status/builder.py: - * buildbot/status/html.py: - * buildbot/status/mail.py: - * buildbot/status/words.py: - * buildbot/test/test_run.py: - move from specifying builders by name to specifying the category - - * buildbot/status/html.py: - * buildbot/status/words.py: - add "builders=" to __init__ of status clients so they can - limit themselves to the given list of builders to report on - - * buildbot/status/html.py: set the title to the product name - -2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org> - - * buildbot/interfaces.py: - * buildbot/status/builder.py: - more documentation. Hm, not sure if ChangeLog entries make sense - here... - -2005-04-23 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts - - * buildbot/test/test_slavecommand.py (Shell): increase timeouts - - * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be - the sub-commands that log buildmaster status to stdout and to a - GUI window, respectively. - - * buildbot/clients/gtkPanes.py: overhaul. basic two-row - functionality is working again, but all the step-status and ETA - stuff is missing. Commented out a lot of code pending more - overhaul work. - - * buildbot/status/client.py: make sure that IRemote(None) is None - - * buildbot/changes/changes.py: import defer, oops - (ChangeMaster): remove the .sources list, rely upon the fact that - MultiServices can be treated as sequences of their children. This - cleans up the add/remove ChangeSource routines a lot, as we keep - exactly one list of the current sources instead of three. - - * buildbot/master.py (BuildMaster.__init__): remove .sources, set - up an empty ChangeMaster at init time. - (BuildMaster.loadChanges): if there are changes to be had from - disk, replace self.change_svc with the new ones. If not, keep - using the empty ChangeMaster set up in __init__. - (BuildMaster.loadConfig_Sources): use list(self.change_svc) - instead of a separate list, makes the code a bit cleaner. - * buildbot/test/test_config.py (ConfigTest.testSimple): match it - (ConfigTest.testSources): same, also wait for loadConfig to finish. - Extend the test to make sure we can get rid of the sources when - we're done. - -2005-04-22 Brian Warner <warner@lothar.com> - - * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin - and info/host files when making the slave directory - - * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the - whendone= argument, just return the Deferred and let the caller do - what they want with it. - (Disconnect.testBuild1): wait for shutdownSlave - (Basedir.testChangeBuilddir): new test to make sure changes to the - builddir actually get propagated to the slave - - * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an - explicit method, rather than passing the builddir in __init__ . - Make sure to update self.basedir too, this was broken before. - (Bot.remote_setBuilderList): use b.setBuilddir for both new - builders and for ones that have just had their builddir changed. - (BotFactory): add a class-level .perspective attribute, so - BuildSlave.waitUntilDisconnected won't get upset when the - connection hasn't yet been established - (BuildSlave.__init__): keep track of the bot.Bot instance, so - tests can reach through it to inspect the SlaveBuilders - - * buildbot/process/base.py (Build.buildException): explain the - log.err with a log.msg - * buildbot/process/builder.py (Builder.startBuild): same - (Builder._startBuildFailed): improve error message - - * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure - occurred because we lost the brand-new connection, retry instead - of giving up. If not, it's probably an authorization failure, and - it makes sense to stop trying. Make sure we log.msg the reason - that we're log.err'ing the failure, otherwise test failures are - really hard to figure out. - - * buildbot/master.py: change loadConfig() to return a Deferred - that doesn't fire until the change has been fully implemented. - This means any connected slaves have been updated with the new - builddir. This change makes it easier to test the code which - actually implements this builddir-updating. - (BotPerspective.addBuilder): return Deferred - (BotPerspective.removeBuilder): same - (BotPerspective.attached): same - (BotPerspective._attached): same. finish with remote_print before - starting the getSlaveInfo, instead of doing them in parallel - (BotPerspective.list_done): same - (BotMaster.removeSlave): same. Fix the typo that meant we weren't - actually calling slave.disconnect() - (BotMaster.addBuilder): same - (BotMaster.removeBuilder): same - (BuildMaster.loadConfig): same - (BuildMaster.loadConfig_Slaves): same - (BuildMaster.loadConfig_Sources): same - (BuildMaster.loadConfig_Builders): same - (BuildMaster.loadConfig_status): same - - * buildbot/changes/changes.py (ChangeMaster.removeSource): return - a Deferred that fires when the source is finally removed - - * buildbot/slave/commands.py (SourceBase.doClobber): when removing - the previous tree on win32, where we have to do it synchronously, - make sure we return a Deferred anyway. - (SourceBase.doCopy): same - - * buildbot/scripts/runner.py (statusgui): use the text client for - now, while I rewrite the Gtk one - * buildbot/clients/base.py: strip out old code, leaving just the - basic print-message-on-event functionality. I also remove the - ReconnectingPBClientFactory, but it does at least quit when it - loses the connection instead of going silent - -2005-04-21 Brian Warner <warner@lothar.com> - - * Makefile: minor tweaks - - * NEWS: point out deprecation warnings, new features for - /usr/bin/buildbot - - * buildbot/master.py (BuildMaster.loadConfig): emit - DeprecationWarnings for Builders defined with tuples. Rearrange - code to facility removal of deprecated configuration keys in the - next release. - - * buildbot/scripts/runner.py (createMaster,createSlave): rewrite - 'buildbot' command to put a little Makefile in the target that - helps you re-create the buildbot.tap file, start or stop the - master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod - all the files 0600, since they contain passwords. - (start): if there is a Makefile, and /usr/bin/make exists, use - 'make start' in preference to a raw twistd command. This lets - slave admins put things like PYTHONPATH variables in their - Makefiles and have them still work when the slave is started with - 'buildbot start ~/slave/foo'. The test is a bit clunky, it would - be nice to first try the 'make' command and only fall back to - twistd if it fails. TODO: the Makefile's "start" command does not - add the --reactor=win32 argument when running under windows. - (Options.debugclient, Options.statusgui): add sub-commands to launch - the debug client (formerly in contrib/debugclient.py) and the - Gtk status application (currently broken) - * buildbot/clients/debug.py: move from contrib/debugclient.py - * buildbot/clients/debug.glade: same - - * buildbot/test/test_trial.py: remove it. This requires some - functionality out of Twisted that isn't there yet, and until then - having it around just confuses things. - - * buildbot/test/test_slavecommand.py (Shell): test both with and - without PTYs, and make sure that command output is properly - interleaved in the with-PTY case. I think the without-PTY test - should pass on windows, where we never use PTYs anyway. - -2005-04-20 Brian Warner <warner@lothar.com> - - * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility - - * MANIFEST.in: add epyrun, gen-reference, buildbot.png - - * NEWS: start creating entries for the next release - - * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep - - * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout - (WebTest.test_webPathname): same - (WebTest.test_webPathname_port): same - (WebTest.test_waterfall): use the default favicon rather than - rooting around the filesystem for it. Open the expected-icon file - in binary mode, to make win32 tests happier (thanks to Nick Trout - for the catch) - * buildbot/status/html.py (buildbot_icon): win32 portability - - * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ): - win32-compatibility fixes from Nick Trout, the "file not found" message - is different under windows - (FakeSlaveBuilder.__init__): clean up setup a bit - * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep - -2005-04-19 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the - skip-if-repositories-are-unavailable test to not kill the trial - that comes with Twisted-1.3.0 - - * setup.py: install buildbot.png icon file when installing code - - * buildbot/slave/commands.py (ShellCommand._startCommand): log the - environment used by the command, at least on the child side. - - * buildbot/status/html.py (TextLog.pauseProducing): add a note, - this method needs to be added and implemented because it gets - called under heavy load. I don't quite understand the - producer/consumer API enough to write it. - (StatusResource.getChild): add a resource for /favicon.ico - (Waterfall.__init__): add favicon= argument - * buildbot/test/test_web.py (WebTest.test_waterfall): test it - (WebTest.test_webPortnum): stop using deprecated 'webPortnum' - (WebTest.test_webPathname): same - (WebTest.test_webPathname_port): same - * docs/config.xhtml: mention favicon= - * buildbot/buildbot.png: add a default icon, dorky as it is - -2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org> - - * buildbot/master.py: - * buildbot/process/base.py: - * buildbot/process/builder.py: - * buildbot/process/interlock.py: - * buildbot/status/builder.py: - * buildbot/status/html.py: - * buildbot/status/mail.py: - * buildbot/status/words.py: - new documentation while digging through the code - -2005-04-17 Brian Warner <warner@lothar.com> - - * general: try to fix file modes on all .py files: a+r, a-x, - but let buildbot/clients/*.py be +x since they're tools - - * docs/epyrun (addMod): when an import fails, say why - - * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff - -2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org> - - * buildbot/process/base.py: - * buildbot/process/builder.py: - * buildbot/status/builder.py: - new documentation while digging through the code - -2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org> - - * buildbot/changes/changes.py: - * buildbot/changes/p4poller.py: - * buildbot/interfaces.py: - * buildbot/process/base.py: - * buildbot/process/builder.py: - * buildbot/process/step.py: - * buildbot/process/step_twisted.py: - * buildbot/slave/bot.py: - * buildbot/slave/commands.py: - * buildbot/status/builder.py: - fix all docstrings to make epydoc happy. In the process of fixing - some, I also moved pieces of docs, and removed some deprecated - documentation - -2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org> - - * buildbot/process/builder.py: - * buildbot/process/interlock.py: - * buildbot/process/process_twisted.py: - * buildbot/process/step.py: - BuildProcess -> Build, as it looks like that's what happened - * buildbot/process/base.py: - * buildbot/process/factory.py: - update epydoc stuff - -2005-04-17 Brian Warner <warner@lothar.com> - - * buildbot/process/process_twisted.py (QuickTwistedBuildFactory): - update compile command to accomodate the Twisted split.. now - instead of './setup.py build_ext -i', you do './setup.py all - build_ext -i', to run build_ext over all sub-projects. - (FullTwistedBuildFactory): same - (TwistedReactorsBuildFactory): same - - * buildbot/status/html.py (TextLog.finished): null out self.req - when we're done, otherwise the reference cycle of TextLog to .req - to .notifications to a Deferred to TextLog.stop keeps them from - being collected, and consumes a huge (610MB on pyramid at last - check) amount of memory. - -2005-04-11 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to - normalize the VC-repository location.. makes SVN happier with - certain test environments. - - * buildbot/process/step.py (RemoteShellCommand.__init__): let each - RemoteShellCommand gets its own .env dictionary, so that code in - start() doesn't mutate the original. I think this should fix the - step_twisted.Trial problem where multiple identical components - kept getting added to PYTHONPATH= over and over again. - - * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3, - adding epydoc-format docstrings to many classes. Thanks to Thomas - Vander Stichele for the patches. - * docs/epyrun, docs/gen-reference: add epydoc-generating tools - * buildbot/status/mail.py, buildbot/process/step_twisted.py: same - * buildbot/slave/bot.py, commands.py, registry.py: same - -2005-04-05 Brian Warner <warner@lothar.com> - - * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to - preserve timestamps, helps incremental builds of large trees. - Patch from Rene Rivera. - - * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log - 'failure' and not the non-existent 'why'. Thanks to Rene Rivera - for the catch. - -2005-04-03 Brian Warner <warner@lothar.com> - - * buildbot/master.py (BuildMaster.loadConfig): only call exec() - with one dict, apparently exec has some scoping bugs when used - with both global/local dicts. Thanks to Nathaniel Smith for the - catch. - -2005-04-02 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (countFailedTests): the new - trial in Twisted-2.0 emits a slightly different status line than - old trial ("PASSED.." instead of "OK.."). Handle it so we don't - mistakenly think the test count is unparseable. - (Trial.start): note that for some reason each build causes another - copy of self.testpath to be prepended to PYTHONPATH. This needs to - be fixed but I'm not sure quite where the problem is. - -2005-04-01 Brian Warner <warner@lothar.com> - - * buildbot/test/test_run.py (Run.testMaster): change some uses of - deferredResult to avoid hangs/warnings under twisted-2.0 - (RunMixin.tearDown): same - (RunMixin.shutdownSlave): same - (Disconnect.testIdle1): same - (Disconnect.testBuild2): same: wait one second after the build - finishes for test to really be done.. this should be cleaned up to - avoid wasting that second. Builder.detach uses a callLater(0), - either that should be done in-line (something else needed that - behavior), or it should return a Deferred that fires when the - builder is really offline. - (Disconnect.testBuild3): same - (Disconnect.testDisappear): same - - * buildbot/test/test_web.py: rearrange server-setup and teardown - code to remove unclean-reactor warnings from twisted-2.0 - - * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine - so the tests don't hang under twisted-2.0 - -2005-03-31 Brian Warner <warner@lothar.com> - - * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that - caused a warning each time the master changed our set of builders - - * buildbot/status/builder.py (BuildStatus.saveYourself): under - w32, don't unlink the file unless it already exists. Thanks to - Baptiste Lepilleur for the catch. - (BuilderStatus.saveYourself): same - -2005-02-01 Brian Warner <warner@lothar.com> - - * buildbot/status/html.py (TextLog.getChild): use a /text child - URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead - of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the - logfile as text/plain (no markup, no headers). This replaces the - previous scheme (which used an ?text=1 argument), and gets us back - to a relative link (which works better when the buildbot lives - behind another web server, such as Apache configured as a reverse - proxy). Thanks to Gerald Combs for spotting the problem. - - * buildbot/__init__.py (version): bump to 0.6.2+ while between - releases - -2004-12-13 Brian Warner <warner@lothar.com> - - * buildbot/__init__.py (version): Releasing buildbot-0.6.2 - - * debian/changelog: update for 0.6.2 - * NEWS: finalize for 0.6.2 - -2004-12-11 Brian Warner <warner@lothar.com> - - * NEWS: bring it up to date - - * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master - detection code. Require some sign of life from the buildmaster - every BotFactory.keepaliveInterval seconds. Provoke this - indication at BotFactory.keepaliveTimeout seconds before the - deadline by sending a keepalive request. We don't actually care if - that request is answered in a timely fashion, what we care about - is that .activity() is called before the deadline. .activity() is - triggered by any PB message from the master (including an ack to - one of the slave's status-update messages). With this new scheme, - large status messages over slow pipes are OK, as long as any given - message can be sent (and thus acked) within .keepaliveTimeout - seconds (which defaults to 30). - (SlaveBuilder.remote_startCommand): record activity - (SlaveBuilder.ackUpdate): same - (SlaveBuilder.ackComplete): same - (BotFactory.gotPerspective): same - * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it - -2004-12-09 Brian Warner <warner@lothar.com> - - * buildbot/status/html.py (StatusResourceBuilder.getChild): remove - debug message - - * buildbot/process/step_twisted.py (Trial._commandComplete): - update self.cmd when we start the 'cat test.log' transfer. Without - this, we cannot interrupt the correct RemoteCommand when we lose - the connection. - - * buildbot/process/step.py (RemoteCommand.interrupt): don't bother - trying to tell the slave to stop the command if we're already - inactive, or if we no longer have a .remote - - * buildbot/process/builder.py (Builder._detached): don't let an - exception in currentBuild.stopBuild() prevent the builder from - being marked offline - -2004-12-07 Brian Warner <warner@lothar.com> - - * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the - KeyError that happens when you ask for a non-existent Builder, and - translate it into a UsageError. - - * buildbot/test/test_run.py (Disconnect.testBuild4): validate that - losing the slave in the middle of a remote step is handled too - - * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can - be a Failure, so be sure to stringify it before using it as the - contents of the 'interrupt' logfile - (RemoteCommand.interrupt): use stringified 'why' in - remote_interruptCommand too, just in case - -2004-12-06 Brian Warner <warner@lothar.com> - - * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay' - instead of 'tla update', which is more efficient in case we've - missed a couple of patches since the last update. - - * debian/changelog: update for previous (0.6.1) release. Obviously - this needs to be handled better. - -2004-12-05 Brian Warner <warner@lothar.com> - - * NEWS: update for stuff since last release - - * buildbot/master.py (DebugPerspective.attached): return 'self', to - match the maybeDeferred change in Dispatcher.requestAvatar - * buildbot/changes/pb.py (ChangePerspective.attached): same - * buildbot/status/client.py (StatusClientPerspective.attached): same - * buildbot/process/builder.py (Builder._attached3): same - * buildbot/pbutil.py (NewCredPerspective.attached): same - - * buildbot/status/html.py (WaterfallStatusResource.phase2): Add - the date to the top-most box, if it is not the same as today's - date. - - * docs/slave.xhtml: provide a buildslave setup checklist - - * docs/source.xhtml (Arch): correct terminology - -2004-12-04 Brian Warner <warner@lothar.com> - - * buildbot/test/test_slavecommand.py: use sys.executable instead - of hard-coding 'python' for child commands, might help portability - - * docs/examples/twisted_master.cfg: update to current usage - - * buildbot/status/words.py (IrcStatusBot.command_STOP): add a - 'stop build' command to the IRC bot - - * buildbot/master.py (Dispatcher.requestAvatar): remove debug - message that broke PBChangeSource - - * buildbot/slave/bot.py: clean up shutdown/lose-master code - (SlaveBuilder): make some attributes class-level, remove the old - "update queue" which existed to support resuming a build after the - master connection was lost. Try to reimplement that feature later. - (SlaveBuilder.stopCommand): clear self.command when the - SlaveCommand finishes, so that we don't try to kill a leftover one - at shutdown time. - (SlaveBuilder.commandComplete): same, merge with commandFailed and - .finishCommand - - * buildbot/slave/commands.py (SourceBase): set self.command for - all VC commands, so they can be interrupted. - -2004-12-03 Brian Warner <warner@lothar.com> - - * buildbot/master.py: clean up slave-handling code, to handle - slave-disconnect and multiple-connect better - (BotPerspective): make these long-lasting, exactly one per bot - listed in the config file. - (BotPerspective.attached): if a slave connects while an existing - one appears to still be connected, disconnect the old one first. - (BotPerspective.disconnect): new method to forcibly disconnect a - buildslave. Use some hacks to empty the transmit buffer quickly to - avoid the long (20-min?) TCP timeout that could occur if the old - slave has dropped off the net. - (BotMaster): Keep persistent BotPerspectives in .slaves, let them - own their own SlaveStatus objects. Remove .attached/.detached, add - .addSlave/.removeSlave, treat slaves like Builders (config file - parsing sends deltas to the BotMaster). Inform the slave - instances, i.e. the BotPerspective, about addBuilder and - removeBuilder. - (BotMaster.getPerspective): turns into a single dict lookup - (Dispatcher.requestAvatar): allow .attached to return a Deferred, - which gives BotPerspective.attached a chance to disconnect the old - slave first. - (BuildMaster.loadConfig): add code (disabled) to validate that all - builders use known slaves (listed in c['bots']). The check won't - work with tuple-specified builders, which are deprecated but not - yet invalid, so the check is disabled for now. - (BuildMaster.loadConfig_Slaves): move slave-config into a separate - routine, do the add/changed/removed dance with them like we do - with builders. - (BuildMaster.loadConfig_Sources): move source-config into a - separate routine too - - * buildbot/status/builder.py (Status.getSlave): get the - SlaveStatus object from the BotPerspective, not the BotMaster. - - * buildbot/test/test_run.py: bunch of new tests for losing the - buildslave at various points in the build, handling a slave that - connects multiple times, and making sure we can interrupt a - running build - - * buildbot/slave/bot.py (BuildSlave): make it possible to use - something other than 'Bot' for the Bot object, to make certain - test cases easier to write. - (BuildSlave.waitUntilDisconnected): utility method for testing - -2004-11-30 Brian Warner <warner@lothar.com> - - * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg - - * buildbot/interfaces.py (IBuilderControl.ping): add timeout= - argument, return a Deferred that always fires with True or False. - I don't use an errback to indicate 'ping failed' so that callers - are free to ignore the deferred without causing spurious errors in - the logs. - * buildbot/process/builder.py (BuilderControl.ping): implement it - - * buildbot/test/test_run.py (Status.testDisappear): test ping - (Status.disappearSlave): fix it - -2004-11-30 Brian Warner <warner@lothar.com> - - * buildbot/interfaces.py (IBuildControl): add .stopBuild - (IBuilderControl): add .getBuild(num), only works for the current - build, of course, although it might be interesting to offer - something for builds in the .waiting or .interlocked state. - - * buildbot/process/base.py (Build): have .stopBuild just do the - interrupt, then let the build die by itself. - (BuildControl): add .stopBuild, and add a point-event named - 'interrupt' just after the build so status viewers can tell that - someone killed it. - (BuilderControl): add .getBuild - - * buildbot/process/step.py (Dummy): use haltOnFailure so it really - stops when you kill it, good for testing - (ShellCommand.interrupt): add a logfile named 'interrupt' which - contains the 'reason' text. - - * buildbot/status/html.py: Add Stop Build button, if the build can - still be stopped. Send a Redirect (to the top page) one second - later, hopefully long enough for the interrupt to have an effect. - Move make_row() up to top-level to share it between Stop Build and - Force Build. - - * buildbot/slave/commands.py: only kill the child process once - - * buildbot/test/test_run.py: add testInterrupt - -2004-11-29 Brian Warner <warner@lothar.com> - - * buildbot/process/base.py: Refactor command interruption. The - Build is now responsible for noticing that the slave has gone - away: Build.lostRemote() interrupts the current step and makes - sure that no further ones will be started. - - * buildbot/process/builder.py: When the initial remote_startBuild - message fails, log it: this usually indicates that the slave has - gone away, but we don't really start paying attention until they - fail to respond to the first step's command. - - * buildbot/process/step.py (RemoteCommand): Does *not* watch for - slave disconnect. Now sports a new interrupt() method. Error - handling was simplified a lot by chaining deferreds, so - remoteFailed/remoteComplete were merged into a single - remoteComplete method (which can now get a Failure object). - Likewise failed/finished were merged into just _finished. - (BuildStep): Add interrupt(why) method, and if why is a - ConnectionLost Failure then the step is failed with some useful - error text. - - * buildbot/slave/bot.py: stop the current command when the remote - Step reference is lost, and when the slave is shut down. - (Bot): make it a MultiService, so it can have children. Use - stopService to tell when the slave is shutting down. - (SlaveBuilder): make it a Service, and a child of the Bot. Add - remote_interruptCommand (which asks the current SlaveCommand to - stop but allows it to keep emitting status messages), and - stopCommand (which tells it to shut up and die). - - * buildbot/slave/commands.py: make commands interruptible - (ShellCommand.kill): factor out os.kill logic - (Command): factor out setup() - (Command.sendStatus): don't send status if .running is false, this - happens when the command has been halted. - (Command.interrupt): new method, used to tell the command to die - (SlaveShellCommand): implement .interrupt - (DummyCommand): implement .interrupt - (SourceBase, etc): factor out setup(), don't continue substeps if - .interrupted is set - - * buildbot/status/builder.py: fix all waitUntilFinished() methods - so they can be called after finishing - - * buildbot/test/test_run.py: new tests for disconnect behavior, - refactor slave-shutdown routines, add different kinds of - slave-shutdown - -2004-11-27 Brian Warner <warner@lothar.com> - - * buildbot/status/words.py (IrcStatusBot.convertTime): utility - method to express ETA time like "2m45s" instead of "165 seconds" - -2004-11-24 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py (VC.testArch): unregister the test - archive after the test completes, to avoid cluttering the user's - 'tla archives' listing with a bogus entry. Arch doesn't happen to - provide any way to override the use of ~/.arch-params/, so there - isn't a convenient way to avoid touching the setup of the user who - runs the test. - (VC_HTTP.testArchHTTP): same - -2004-11-23 Brian Warner <warner@lothar.com> - - * buildbot/status/html.py (TextLog): split render() up into - render_HEAD and render_GET. Use a Producer when sending log - chunks, to reduce memory requirements and avoid sending huge - non-Banana-able strings over web.distrib connections. Requires - peeking under the covers of IStatusLog. - (TextLog.resumeProducing): fix the "as text" link, handle client - disconnects that occur while we're still sending old chunks. - - * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops, - use defer.succeed, not the non-existent defer.success - (LogFile.waitUntilFinished): same - (LogFile.subscribe): don't add watchers to a finished logfile - - * buildbot/__init__.py (version): bump to 0.6.1+ while between - releases - -2004-11-23 Brian Warner <warner@lothar.com> - - * buildbot/__init__.py (version): Releasing buildbot-0.6.1 - -2004-11-23 Brian Warner <warner@lothar.com> - - * NEWS: update for the 0.6.1 release - * MANIFEST.in: add new files - - * README (INSTALLATION): explain how to enable the extra VC tests - - * buildbot/status/builder.py (LogFile): add .runEntries at the class - level to, so old pickled builds can be displayed ok - -2004-11-22 Brian Warner <warner@lothar.com> - - * NEWS: summarize updates since last release - - * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to - Yoz Grahame. Closes SF#1050138. - - * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes - SF#1042563. - - * buildbot/process/step_twisted.py (Trial): update docs a bit - - * docs/factories.xhtml: fix Trial factory docs to match reality. - Closes: SF#1049758. - - * buildbot/process/factory.py (Trial.__init__): add args for - randomly= and recurse=, making them available to instantiators - instead of only to subclassers. Closes: SF#1049759. - -2004-11-15 Brian Warner <warner@lothar.com> - - * buildbot/process/process_twisted.py (QuickTwistedBuildFactory): - try to teach the Quick factory to use multiple versions of python - -2004-11-12 Brian Warner <warner@lothar.com> - - * buildbot/status/builder.py (BuilderStatus.saveYourself): use a - safer w32-compatible approach, and only use it on windows - (BuildStatus.saveYourself): same - -2004-11-11 Brian Warner <warner@lothar.com> - - * buildbot/status/builder.py (LogFile.addEntry): smarter way to do - it: one string merge per chunk. There are now separate .entries - and .runEntries lists: when enumerating over all chunks, make sure - to look at both. - * buildbot/test/test_status.py (Log): more tests - - * buildbot/status/builder.py (LogFile.addEntry): Merge string - chunks together, up to 10kb per chunk. This ought to cut down on - the CPU-burning overhead of large log files. Thanks to Alexander - Staubo for spotting the problem. - * buildbot/test/test_status.py (Log): tests for same - -2004-11-10 Brian Warner <warner@lothar.com> - - * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date - header to outbound mail - * buildbot/test/test_status.py (Mail.testBuild1): test for same - -2004-11-08 Brian Warner <warner@lothar.com> - - * buildbot/status/builder.py (BuilderStatus.saveYourself): w32 - can't do os.rename() onto an existing file, so catch the exception - and unlink the target file first. This introduces a slight window - where the existing file could be lost, but the main failure case - (disk full) should still be handled safely. - (BuildStatus.saveYourself): same - - * buildbot/changes/pb.py (ChangePerspective): use a configurable - separator character instead of os.sep, because the filenames being - split here are coming from the VC system, which can have a - different pathname convention than the local host. This should - help a buildmaster running on windows that uses a CVS repository - which runs under unix. - * buildbot/changes/mail.py (MaildirSource): same, for all parsers - - * buildbot/process/step_twisted.py (Trial.createSummary): survive - when there are no test failures to be parsed - - * buildbot/scripts/runner.py (createMaster): use shutil.copy() - instead of the unix-specific os.system("cp"), thanks to Elliot - Murphy for this and the other buildbot-vs-windows catches. - * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same - - * contrib/windows/buildbot.bat: prefix a '@', apparently to not - echo the command as it is run - - * setup.py: install sample.mk too, not just sample.cfg - (scripts): install contrib/windows/buildbot.bat on windows - -2004-11-07 Brian Warner <warner@lothar.com> - - * buildbot/process/builder.py (Builder._detached): clear the - self.currentBuild reference, otherwise the next build will be - skipped because we think the Builder is already in use. - - * docs/examples/twisted_master.cfg: update to match current usage - on the Twisted buildbot - -2004-10-29 Brian Warner <warner@lothar.com> - - * buildbot/status/mail.py (MailNotifier): fix typo in docs - -2004-10-28 Brian Warner <warner@lothar.com> - - * buildbot/slave/commands.py (SourceBase): refactor subclasses to - have separate doVCUpdate/doVCFull methods. Catch an update failure - and respond by clobbering the source directory and re-trying. This - will handle local changes (like replacing a file with a directory) - that will cause CVS and SVN updates to fail. - * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same - - * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a - python-2.4 warning - -2004-10-19 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes - - * buildbot/status/html.py (StatusResourceTestResults): display any - TestResults that the Build might have - (StatusResourceTestResult): and the logs for each TestResult - (StatusResourceBuild): add link from the per-build page - -2004-10-15 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (Trial.createSummary): parse - the 'problems' portion of stdout, add TestResults to our build - * buildbot/test/test_twisted.py (Parse.testParse): test it - - * buildbot/interfaces.py (IBuildStatus.getTestResults): new method - to retrieve a dict of accumulated test results - (ITestResult): define what a single test result can do - * buildbot/status/builder.py (TestResult): implement ITestResult - (BuildStatus.getTestResults): retrieve dict of TestResults - (BuildStatus.addTestResult): add TestResults - * buildbot/test/test_status.py (Results.testAddResults): test it - -2004-10-14 Brian Warner <warner@lothar.com> - - * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree - instead of os.system("rm -rf") for win32 portability - - * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use - SignalMixin instead of starting/stopping the reactor, which is - likely to cause problems with other tests - - * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover - self.copyComplete() call. Yoz Grahame makes the catch. - - * contrib/windows/buildbot.bat: helper script to deal with path - issues. Thanks to Yoz Grahame. - - * buildbot/master.py (BuildMaster.startService): don't register a - SIGHUP handler if the signal module has no SIGHUP attribute. - Apparently win32 does this. - - * buildbot/scripts/runner.py (start): add --reactor=win32 on win32 - - * buildbot/test/test_web.py (WebTest.test_webPathname): skip the - test if the reactor can't offer UNIX sockets - - * buildbot/status/html.py (StatusResourceBuild.body): fix syntax - error introduced in the last commit. We really need that - metabuildbot :). - -2004-10-12 Brian Warner <warner@lothar.com> - - * buildbot/changes/mail.py (MaildirSource.describe): fix exception - when describing a maildir source. Thanks to Stephen Davis. - - * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off - ETA seconds - - * buildbot/scripts/runner.py (createMaster): install Makefile too - (start): add --no_save to 'start' command - * buildbot/scripts/sample.mk: simple convenience Makefile with - start/stop/reload targets - - * buildbot/__init__.py (version): bump to 0.6.0+ while between - releases - -2004-09-30 Brian Warner <warner@lothar.com> - - * setup.py: Releasing buildbot-0.6.0 - -2004-09-30 Brian Warner <warner@lothar.com> - - * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove - test_trial.py from the source tarball until support is complete. - - * NEWS: update for 0.6.0 release - * buildbot/__init__.py (version): same - * README: same - - * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add - 'source' command to tell users where to get the Buildbot source - - * docs/examples/*.cfg: update to modern standards - - * NEWS: update for release - - * buildbot/scripts/runner.py (createMaster): remove the - -shutdown.tap stuff now that it isn't necessary - (createSlave): same - (start): launch buildbot.tap, not buildbot-shutdown.tap - - - * buildbot/status/mail.py (Domain): shorten class name - (MailNotifier): if lookup= is a string, pass it to Domain() - * buildbot/test/test_status.py (Mail.testBuild1): new class name - (Mail.testBuild2): test the string-to-Domain shortcut - (Mail.testMail): fix test - - - * buildbot/scripts/sample.cfg: improve the build-the-buildbot - example config file - - * buildbot/status/builder.py (BuildStatus.__setstate__): re-set - more attributes on load - (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low - to accomodate the whole waterfall page at once, and the thrashing - results in a lot of unnecessary loads - (BuildStatus.saveYourself): use binary pickles, not fluffy text - (BuilderStatus.saveYourself): same - (BuilderStatus.eventGenerator): stop generating on the first missing - build. We assume that saved builds are deleted oldest-first. - (BuildStepStatus.__getstate__): .progress might not exist - - * buildbot/changes/changes.py (ChangeMaster): make it - serializable, in $masterdir/changes.pck - (ChangeMaster.stopService): save on shutdown - * buildbot/master.py (BuildMaster.loadChanges): load at startup - * buildbot/test/test_config.py: load Changes before config file - - - * buildbot/slave/commands.py (ShellCommand.doTimeout): put the - "Oh my god, you killed the command" header on a separate line - - * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber): - skip over corrupted build pickles - (BuilderStatus.getFullBuildByNumber): same - (BuilderStatus.eventGenerator): skip over unavailable builds - (BuildStatus.saveYourself): save builds to a .tmp file first, then - do an atomic rename. This prevents a corrupted pickle when some - internal serialization error occurs. - (BuilderStatus.saveYourself): same - - * buildbot/slave/commands.py (SlaveShellCommand): oops, restore - the timeout for shell commands, it got lost somehow - - * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we - run out of build steps, return the rest of the builder events - - * buildbot/interfaces.py (IBuilderControl.ping): add method - - * buildbot/process/builder.py (BuilderControl.ping): move - slave-ping to BuilderControl, and fix the failure case in the - process (Event.finish() is the verb, Event.finished is the noun). - - * buildbot/status/html.py (StatusResourceBuilder.ping): ping - through the BuilderControl instead of the BuilderStatus - (EventBox): add adapter for builder.Event, allowing builder events to - be displayed in the waterfall display - - * buildbot/master.py (BotMaster.stopService): add a 'master - shutdown' event to the builder's log - (BuildMaster.startService): and a 'master started' on startup - - * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge - builder events into the BuildStep event stream - (Status.builderAdded): add a 'builder created' event - - - * buildbot/status/words.py (IrcStatusBot.command_WATCH): new - command to announce the completion of a running build - (IrcStatusBot.command_FORCE): announce when the build finishes - - * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache): - don't evict unfinished builds from the cache: they must stay in - the full-cache until their logfiles have stopped changing. Make - sure the eviction loop terminates if an unfinished build was hit. - (HTMLLogFile.getTextWithHeaders): return HTML as if it were text. - This lets exceptions be dumped in an email status message. Really - we need LogFiles which contain both text and HTML, instead of two - separate classes. - (BuildStatus.__getstate__): handle self.finished=False - (Status.builderAdded): if the pickle is corrupted, abandon the - history and create a new BuilderStatus object. - - * buildbot/process/base.py (Build.stopBuild): tolerate lack of a - self.progress attribute, helped one test which doesn't fully set - up the Build object. - - * buildbot/interfaces.py (IStatusLogStub): split out some of the - IStatusLog methods into an Interface that is implemented by "stub" - logs, for which all the actual text chunks are on disk (in the - pickled Build instance). To show the log contents, you must first - adapt the stub log to a full IStatusLog object. - - * buildbot/status/builder.py (LogFileStub): create separate stub - log objects, which can be upgraded to a real one if necessary. - (LogFile): make them persistable, and let them stubify themselves - (HTMLLogFile): same - (BuildStepStatus): same - (BuildStatus): same - (BuildStatus.saveYourself): save the whole build out to disk - (BuilderStatus): make it persistable - (BuilderStatus.saveYourself): save the builder to disk - (BuilderStatus.addFullBuildToCache): implement two caches which - hold Build objects: a small one which holds full Builds, and a - larger one which holds "stubbed" Builds (ones with their LogFiles - turned into LogFileStubs). This reduces memory usage by the - buildmaster by not keeping more than a few (default is 2) whole - build logs in RAM all the time. - (BuilderStatus.getBuild): rewrite to pull from disk (through the - cache) - (BuilderStatus.eventGenerator): rewrite since .builds went away - (BuilderStatus.buildStarted): remove the .builds array. Add the - build to the "full" cache when it starts. - (BuilderStatus._buildFinished): save the build to disk when it - finishes - (Status): give it a basedir (same as the BuildMaster's basedir) - where the builder pickles can be saved - (Status.builderAdded): create the BuilderStatus ourselves, by - loading a pickle from disk (or creating a new instance if there - was none on disk). Return the BuilderStatus so the master can glue - it into the new Builder object. - - * buildbot/master.py (BotMaster.stopService): on shutdown, tell - all BuilderStatuses to save themselves out to disk. This is in - lieu of saving anything important in the main Application pickle - (the -shutdown.tap file). - (BuildMaster.__init__): give Status() a basedir for its files - (BuildMaster.loadConfig_Builders): do status.builderAdded first, - to get the BuilderStatus, then give it to the Builder (instead of - doing it the other way around). It's ok if the status announces - the new Builder before it's really ready, as the outside world can - only see the BuilderStatus object anyway (and it is ready before - builderAdded returns). Use the builder's "builddir" (which - normally specifies where the slave will run the builder) as the - master's basedir (for saving serialized builds). - - * buildbot/status/html.py (StatusResourceBuildStep.getChild): - coerce the logfile to IStatusLog before trying to get the text - chunks out of it. This will pull the full (non-stubified) Build in - from disk if necessary. - (TextLog): fix the adapter registration - - * buildbot/test/test_control.py (Force.setUp): create the basedir - * buildbot/test/test_web.py: same - * buildbot/test/test_vc.py (SetupMixin.setUp): same - * buildbot/test/test_status.py (Mail.makeBuild): match new setup - * buildbot/test/test_run.py (Run.testMaster): same - (Status.setUp): same - -2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org> - - * buildbot/status/html.py (Waterfall.__init__): store actual - allowForce flag passed in rather than using True for everyone; - make sure setting it to False doesn't cause a NameError - (Waterfall.setup). - (StatusResourceBuilder.__init__) add the builder name to the page - title. - (StatusResourceBuilder.body) move HTML generation for a name/value - row into a helper method (StatusResourceBuilder.make_row); only - generate the "Force Build" form if allowForce was True and the - slave is connected. Use class attributes in the generated HTML to - spread a little CSS-joy. - -2004-09-28 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (Trial.createSummary): fix - warning-scanner to not ignore things like - 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning' - - * buildbot/status/html.py (StatusResource.control): add some - class-level values for .control in an attempt to make upgrading - smoother - - * buildbot/util.py (ComparableMixin): survive missing attributes, - such as when a class is modified and we're comparing old instances - against new ones - - * buildbot/status/words.py (IrcStatusBot.privmsg): clean up - failure handling, remove a redundant try/except block. Don't - return the full traceback to the IRC channel. - (IrcStatusBot.command_FORCE): catch new exceptions, return useful - error messages. Get ETA properly. - - * buildbot/status/html.py (StatusResourceBuild.body): html.escape - the reason, since (at least) IRC message will have <> in them. - (StatusResourceBuilder.__init__): take an IBuilderControl - (StatusResourceBuilder.force): use the IBuilderControl we get in - the constructor instead of trying to make our own. Catch the - new exceptions and ignore them for now (until we make an - intermediate web page where we could show the error message) - (StatusResource): create with an IControl, use it to give an - IBuilderControl to all children - (Waterfall): take an allowForce= option, pass an IControl object - to StatusResource if it is True - - * buildbot/test/test_web.py (ConfiguredMaster): handle IControl - - * buildbot/master.py (BotPerspective.perspective_forceBuild): - catch new exceptions and return string forms - - * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError - * buildbot/process/builder.py (Builder.forceBuild): raise them - * buildbot/test/test_control.py (Force.testNoSlave): new test - (Force.testBuilderInUse): same - - - * buildbot/status/words.py (IrcStatusBot): enable build-forcing - - * buildbot/test/test_run.py: use IControl - * buildbot/test/test_vc.py: same - - * buildbot/status/html.py (StatusResourceBuilder.force): rewrite - to use IControl. Still offline. - * buildbot/status/words.py (IrcStatusBot.command_FORCE): same - - * buildbot/process/builder.py (Builder.doPeriodicBuild): set - who=None so periodic builds don't send out status mail - (Builder.forceBuild): include reason in the log message - (BuilderControl.forceBuild): rename 'name' to 'who' - - * buildbot/master.py (BotPerspective.perspective_forceBuild): add - 'who' parameter, but make it None by default so builds forced by - slave admins don't cause status mail to be sent to anybody - (BotMaster.forceBuild): same. this method is deprecated. - (DebugPerspective.perspective_forceBuild): same, use IControl. - (DebugPerspective.perspective_fakeChange): use IControl.. - (Dispatcher.requestAvatar): .. so don't set .changemaster - - * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who' - parameter to avoid confusion with the name of the builder - - - * buildbot/status/mail.py: refine comment about needing 2.3 - - * buildbot/status/html.py: move all imports to the top - - * buildbot/test/test_control.py: test new interfaces - * buildbot/test/test_run.py (Status): handle new interfaces - * buildbot/test/test_vc.py (SetupMixin.doBuild): same - - * buildbot/process/base.py (BuildControl): implement IBuildControl - and its lonely getStatus() method - - * buildbot/process/builder.py (BuilderControl): implement - IBuilderControl, obtained by adapting the Builder instance - (Builder.startBuild): return a BuilderControl instead of a - Deferred. The caller can use bc.getStatus().waitUntilFinished() to - accomplish the same thing. - - * buildbot/master.py: move all import statements to the top - (Control): implement IControl, obtained by adapting the - BuildMaster instance. - - * buildbot/interfaces.py: add IControl, IBuilderControl, and - IBuildControl. These are used to force builds. Eventually they - will provide ways to reconfigure the Builders, pause or abandon a - Build, and perhaps control the BuildMaster itself. - -2004-09-26 Brian Warner <warner@lothar.com> - - * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which - ends up comparing us against something without a .__class__ - -2004-09-24 Brian Warner <warner@lothar.com> - - * buildbot/scripts/runner.py: rearrange option parsing a lot, to get - usage text right. - - * Makefile: add 'deb-snapshot' target, to create a timestamped - .deb package - - * debian/rules (binary-indep): skip CVS/ files in dh_installexamples - -2004-09-23 Brian Warner <warner@lothar.com> - - * buildbot/__init__.py (version): move version string here - * setup.py: get version string from buildbot.version - * buildbot/status/html.py (WaterfallStatusResource.body): add - buildbot version to the page footer - * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide - version when asked - - * buildbot/master.py (BotMaster.getPerspective): detect duplicate - slaves, let the second know where the first one is coming from - (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can - see our exceptions. It would be nice if there were a way to just - send them the exception type and value, not the full traceback. - - - * buildbot/status/mail.py (MailNotifier): add a new argument - sendToInterestedUsers=, which can be set to False to disable the - usual send-to-blamelist behavior. - (top): handle python-2.2 which has no email.MIMEMultipart - (MailNotifier.buildMessage): don't send logs without MIMEMultipart - (MailNotifier.disownServiceParent): unsubscribe on removal - - * buildbot/test/test_status.py (Mail.testBuild2): test it - - - * buildbot/status/progress.py (Expectations.wavg): tolerate - current=None, which happens when steps start failing badly - * buildbot/test/test_status.py (Progress.testWavg): test for it - - * buildbot/process/step.py (SVN.startVC): when the (old) slave - doesn't understand args['revision'], emit a warning instead of - bailing completely. Updating to -rHEAD is probably close enough. - - * buildbot/process/step_twisted.py (Trial.start): fix sanity-check - - * buildbot/test/test_status.py: at least import bb.status.client - even if we don't have any test coverage for it yet - - * contrib/svn_buildbot.py: don't require python2.3 - (main): wait, do require it (for sets.py), but explain how to - make it work under python2.2 - -2004-09-23 Brian Warner <warner@lothar.com> - - * contrib/svn_buildbot.py: include the revision number in the Change - - * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=, - using util.now() because FreshCVS is a realtime service - - * buildbot/status/event.py: delete dead code - * buildbot/process/step.py: don't import dead Event class - * buildbot/process/step_twisted.py: same - * buildbot/status/builder.py: same - * buildbot/status/client.py: same - - * buildbot/test/test_process.py: kill buggy out-of-date disabled test - - * buildbot/changes/changes.py (Change): set .when from an __init__ - argument (which defaults to now()), rather than having - ChangeMaster.addChange set it later. - (ChangeMaster.addChange): same - - * buildbot/changes/mail.py (parseFreshCVSMail): pass in when= - (parseSyncmail): same. Just use util.now() for now. - (parseBonsaiMail): parse the timestamp field for when= - - * buildbot/test/test_vc.py (SourceStamp.addChange): page in when= - instead of setting .when after the fact - -2004-09-22 slyphon - - * buildbot/slave/trial.py: new SlaveCommand to machine-parse test - results when the target project uses retrial. Still under - development. - * buildbot/test/test_trial.py: same - -2004-09-21 Brian Warner <warner@lothar.com> - - * buildbot/status/mail.py (MailNotifier.__init__): include - success/warnings/failure in the Subject line - (MailNotifier.buildMessage): add the buildbot's URL to the body, - use step.logname for the addLogs=True attachment filenames - * buildbot/test/test_status.py (Mail): test Subject lines - (Mail.testLogs): test attachment filenames - - * buildbot/master.py (DebugPerspective.perspective_fakeChange): - accept a 'who' argument from the debug tool - * contrib/debugclient.py (DebugWidget.do_commit): send 'who' - * contrib/debug.glade: add text box to set 'who' - - * buildbot/interfaces.py (IBuildStatus.getBuilder): replace - .getBuilderName with .getBuilder().getName(), more flexible - (IStatusLog.getName): logs have short names, but you can prefix - them with log.getStep().getName() to make them more useful - * buildbot/status/builder.py: same - * buildbot/status/client.py: same - * buildbot/status/html.py: same - * buildbot/test/test_run.py (Status.testSlave): same - * buildbot/process/step.py: tweak logfile names - - * buildbot/status/mail.py (MailNotifier): add lookup, change - argument to extraRecipients. The notifier is now aimed at sending - mail to the people involved in a particular build, with additional - constant recipients as a secondary function. - - * buildbot/test/test_status.py: add coverage for IEmailLookup, - including slow-lookup and failing-lookup. Make sure the blamelist - members are included. - - * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup - (IBuildStatus.getResponsibleUsers): rename from getBlamelist - (IBuildStatus.getInterestedUsers): new method - * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same - * buildbot/status/client.py (remote_getResponsibleUsers): same - * buildbot/status/html.py (StatusResourceBuild.body): same - * buildbot/test/test_run.py (Status.testSlave): same - -2004-09-20 Brian Warner <warner@lothar.com> - - * docs/users.xhtml: update concepts - - * Makefile: add a convenience makefile, for things like 'make - test'. It is not included in the source tarball. - -2004-09-16 Brian Warner <warner@lothar.com> - - * NEWS: mention /usr/bin/buildbot, debian/* - - * debian/*: add preliminary debian packaging. Many thanks to - Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled - it considerably since it left their hands, I am responsible for - all breakage that's resulted. - - * bin/buildbot: create a top-level 'buildbot' command, to be - installed in /usr/bin/buildbot . For now it's just a simple - frontend to mktap/twistd/kill, but eventually it will be the entry - point to the 'try' command and also a status client. It is also - intended to support the upcoming debian-packaging init.d scripts. - * buildbot/scripts/runner.py: the real work is done here - * buildbot/scripts/__init__.py: need this too - * buildbot/scripts/sample.cfg: this is installed in new - buildmaster directories - * setup.py: install new stuff - -2004-09-15 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the - 'file:' schema (the version shipped with OS-X was built without the - ra_local plugin). - (SetupMixin.tearDown): stop the goofy twisted.web timer which - updates the log-timestamp, to make sure it isn't still running after - the test finishes - - * docs/config.xhtml: Add projectName, projectURL, buildbotURL - values to the config file. - * docs/examples/hello.cfg: add examples - * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors - * buildbot/status/builder.py (Status.getProjectURL): implement them - * buildbot/master.py (BuildMaster.loadConfig): set them from config - * buildbot/test/test_config.py (ConfigTest.testSimple): test them - * buildbot/status/html.py (WaterfallStatusResource): display them - - - * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so - certain error cases don't suffer a secondary exception. - (top): Skip tests if the corresponding VC tool is not installed. - - * buildbot/process/factory.py (Trial): introduce separate - 'buildpython' and 'trialpython' lists, since trialpython=[] is - what you want to invoke /usr/bin/python, whereas ./setup.py is - less likely to be executable. Add env= parameter to pass options - to test cases (which is how I usually write tests, I don't know if - anyone else does it this way). - - * buildbot/process/step_twisted.py (Trial): handle python=None. - Require 'testpath' be a string, not a list. Fix tests= typo. - (Trial.start): sanity-check any PYTHONPATH value for stringness. - - * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy - way to deal with the possibility of removing the disconnect notify - twice. - (CVS): add a 'login' parameter to give a password to 'cvs login', - commonly used with pserver methods (where pw="" or pw="guest") - - * buildbot/slave/commands.py (SourceBase): move common args - extraction and setup() to __init__, so everything is ready by the - time setup() is called - (CVS.start): call 'cvs login' if a password was supplied - (ShellCommand): special-case PYTHONPATH: prepend the master's - value to any existing slave-local value. - - * buildbot/process/builder.py (Builder.updateBigStatus): if we - don't have a remote, mark the builder as Offline. This whole - function should probably go away and be replaced by individual - deltas. - (Builder.buildFinished): return the results to the build-finished - deferred callback, helps with testing - -2004-09-14 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py: put all the repositories needed to run - the complete tests into a single small (1.3MB) tarball, so I can - make that tarball available on the buildbot web site. Test HTTP - access (for Arch and Darcs) by spawning a temporary web server - while the test runs. - - * docs/users.xhtml: new document, describe Buildbot's limited - understanding of different human users - - * buildbot/test/test_vc.py: rearrange test cases a bit - - * buildbot/process/step_twisted.py (Trial): handle testpath= - * buildbot/process/factory.py (Trial): update to use step.Trial - - * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo - - * buildbot/status/builder.py (BuildStatus.getText): add text2 to - the overall build text (which gives you 'failed 2 tests' rather - than just 'failed') - (BuildStepStatus.text2): default to [], not None - - * buildbot/process/step_twisted.py (Trial.commandComplete): text2 - must be a list - -2004-09-12 Brian Warner <warner@lothar.com> - - * buildbot/master.py (BotPerspective._commandsUnavailable): don't - log the whole exception if it's just an AttributeError (old slave) - - * buildbot/process/step.py (ShellCommand.__init__): stash .workdir - so (e.g.) sub-commands can be run in the right directory. - (ShellCommand.start): accept an optional errorMessage= argument - to make life easier for SVN.start - (SVN.startVC): put the "can't do mode=export" warning in the LogFile - headers - (ShellCommand.start): move ['dir'] compatibility hack.. - (RemoteShellCommand.start): .. to here so everyone can use it - - * buildbot/process/step_twisted.py (Trial): use .workdir - - * buildbot/process/step_twisted.py (BuildDebs.getText): fix the - text displayed when debuild fails completely - (Trial): snarf _trial_temp/test.log from the slave and display it - -2004-09-11 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (ProcessDocs.getText): typo - - * buildbot/process/process_twisted.py (TwistedTrial.tests): oops, - set to 'twisted', so --recurse can find twisted/web/test/*, etc - - * buildbot/process/step.py (ShellCommand): call .createSummary - before .evaluateCommand instead of the other way around. This - makes it slightly easier to count warnings and then use that to - set results=WARNINGS - * buildbot/process/step_twisted.py: cosmetic, swap the methods - - * buildbot/process/base.py (Build.buildFinished): update status - before doing progress. It's embarrassing for the build to be stuck - in the "building" state when an exceptions occurs elsewhere.. - - * buildbot/status/progress.py (Expectations.expectedBuildTime): - python2.2 doesn't have 'sum' - - * buildbot/status/builder.py (Status.getBuilderNames): return a copy, - to prevent clients from accidentally sorting it - - * buildbot/master.py (Manhole): add username/password - (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than - c['manholePort'], deprecate old usage - * docs/config.xhtml: document c['manhole'] - * docs/examples/hello.cfg: show example of using a Manhole - - - * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion): - pretend the slave is up to date - - * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log', - the module, overlaps with 'log', the local variable - - * buildbot/status/html.py: oops, 2.2 needs __future__ for generators - - * buildbot/process/builder.py (Builder.getSlaveCommandVersion): - new method to let Steps find out the version of their - corresponding SlaveCommand. - * buildbot/process/step.py (BuildStep.slaveVersion): utility method - (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves - (CVS.startVC): backwards compatibility for <=0.5.0 slaves - (SVN.startVC): same - (Darcs.startVC): detect old slaves (missing the 'darcs' command) - (Arch.startVC): same - (P4Sync.startVC): same - - * buildbot/process/step.py (LoggedRemoteCommand.start): return the - Deferred so we can catch errors in remote_startCommand - (RemoteShellCommand.start): same - - * docs/examples/twisted_master.cfg: update sample config file - - * buildbot/slave/commands.py (ShellCommandPP): write to stdin - after connectionMade() is called, not before. Close stdin at that - point too. - - * buildbot/process/process_twisted.py: update to use Trial, clean - up argument passing (move to argv arrays instead of string - commands) - - * buildbot/process/step_twisted.py (Trial): new step to replace - RunUnitTests, usable by any trial-using project (not just - Twisted). Arguments have changed, see the docstring for details. - - * buildbot/process/base.py (Build.startBuild): this now returns a - Deferred. Exceptions that occur during setupBuild are now - caught better and lead to fewer build_status weirdnesses, like - finishing a build that was never started. - (Build.buildFinished): fire the Deferred instead of calling - builder.buildFinished directly. The callback argument is this - Build, everything else can be extracted from it, including the - new build.results attribute. - * buildbot/process/builder.py (Builder.startBuild): same - (Builder.buildFinished): same, extract results from build - - * buildbot/process/step.py (ShellCommands): remove dead code - -2004-09-08 Brian Warner <warner@lothar.com> - - * buildbot/test/test_vc.py (VC.doPatch): verify that a new build - doesn't try to use the leftover patched workdir - (SourceStamp): test source-stamp computation for CVS and SVN - - * buildbot/slave/commands.py (SourceBase.doPatch): mark the - patched workdir ('touch .buildbot-patched') so we don't try to - update it later - (SourceBase.start): add ['revision'] for all Source steps - (CVS): change args: use ['branch'] for -r, remove ['files'] - (CVS.buildVC): fix revision/branch stuff - (SVN): add revision stuff - - * buildbot/process/step.py (BuildStep.__init__): reject unknown - kwargs (except 'workdir') to avoid silent spelling errors - (ShellCommand.__init__): same - (Source): new base class for CVS/SVN/etc. Factor out everything - common, add revision computation (perform the checkout with a -D - DATE or -r REVISION that gets exactly the sources described by the - last Change), overridable with step.alwaysUseLatest. Add patch - handling (build.getSourceStamp can trigger the use of a base - revision and a patch). - (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments - * docs/steps.xhtml: update docs - * docs/source.xhtml: mention .checkoutDelay - * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest - - * buildbot/process/base.py (Build.setSourceStamp): add a - .sourceStamp attribute to each Build. If set, this indicates that - the build should be done with something other than the most - recent source tree. This will be used to implement "try" builds. - (Build.allChanges): new support method - (Build.lastChangeTime): remove, functionality moved to Source steps - (Build.setupBuild): copy the Step args before adding ['workdir'], - to avoid modifying the BuildFactory (and thus triggering spurious - config changes) - - - * buildbot/status/html.py: rename s/commits/changes/ - (StatusResourceChanges): same - (CommitBox.getBox): same, update URL - (WaterfallStatusResource): same - (StatusResource.getChild): same - - * contrib/debugclient.py (DebugWidget.do_commit): send .revision - * contrib/debug.glade: add optional 'revision' to the fakeChange - - * buildbot/changes/changes.py (html_tmpl): display .revision - (ChangeMaster.addChange): note .revision in log - * buildbot/changes/pb.py (ChangePerspective.perspective_addChange): - accept a ['revision'] attribute - - * buildbot/process/factory.py (BuildFactory): use ComparableMixin - - * buildbot/master.py (BotMaster.getPerspective): update the - .connected flag in SlaveStatus when it connects - (BotMaster.detach): and when it disconnects - (DebugPerspective.perspective_fakeChange): take a 'revision' attr - (BuildMaster.loadConfig_Builders): walk old list correctly - - * buildbot/test/test_config.py: fix prefix= usage - -2004-09-06 Brian Warner <warner@lothar.com> - - * NEWS: mention P4 - - * buildbot/changes/p4poller.py (P4Source): New ChangeSource to - poll a P4 depot looking for recent changes. Thanks to Dave - Peticolas for the contribution. Probably needs some testing after - I mangled it. - - * buildbot/process/step.py (P4Sync): simple P4 source-updater, - requires manual client setup for each buildslave. Rather - experimental. Thanks again to Dave Peticolas. - * buildbot/slave/commands.py (P4Sync): slave-side source-updater - - * buildbot/changes/changes.py (Change): add a .revision attribute, - which will eventually be used to generate source-stamp values. - - * buildbot/process/step.py (RemoteCommand.start): use - notifyOnDisconnect to notice when we lose the slave, then treat it - like an exception. This allows LogFiles to be closed and the build - to be wrapped up normally. Be sure to remove the disconnect - notification when the step completes so we don't accumulate a - bazillion such notifications which will fire weeks later (when the - slave finally disconnects normally). Fixes SF#915807, thanks to - spiv (Andrew Bennetts) for the report. - (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it - really isn't Logged- specific - (LoggedRemoteCommand.remoteFailed): Add an extra newline to the - header, since it's almost always going to be appended to an - incomplete line - * buildbot/test/test_steps.py (BuildStep.testShellCommand1): - update test to handle use of notifyOnDisconnect - - * buildbot/status/builder.py (BuilderStatus.currentlyOffline): - don't clear .ETA and .currentBuild when going offline, let the - current build clean up after itself - - * buildbot/process/builder.py (Builder.detached): wait a moment - before doing things like stopping the current build, because the - current step will probably notice the disconnect and cleanup the - build by itself - * buildbot/test/test_run.py (Status.tearDown): update test to - handle asynchronous build-detachment - - * buildbot/process/base.py (Build.stopBuild): minor shuffles - - * buildbot/status/html.py (WaterfallStatusResource.buildGrid): - hush a debug message - -2004-09-05 Brian Warner <warner@lothar.com> - - * buildbot/changes/maildir.py (Maildir.start): catch an IOError - when the dnotify fcntl() fails and fall back to polling. Linux 2.2 - kernels do this: the fcntl module has the F_NOTIFY constant, but - the kernel itself doesn't support the operation. Thanks to Olly - Betts for spotting the problem. - - * buildbot/process/step.py (Darcs): new source-checkout command - (Arch): new source-checkout command - (todo_P4): fix constructor syntax, still just a placeholder - * buildbot/test/test_vc.py (VC.testDarcs): test it - (VC.testDarcsHTTP): same, via localhost HTTP - (VC.testArch): same - (VC.testArchHTTP): same - * NEWS: mention new features - - * buildbot/slave/commands.py (ShellCommand): add .keepStdout, - which tells the step to stash stdout text locally (in .stdout). - Slave-side Commands can use this to make decisions based upon the - output of the the ShellCommand (not just the exit code). - (Darcs): New source-checkout command - (Arch): New source-checkout command, uses .keepStdout in one place - where it needs to discover the archive's default name. - - * docs/steps.xhtml: Document options taken by Darcs and Arch. - * docs/source.xhtml: add brief descriptions of Darcs and Arch - * docs/examples/hello.cfg: add examples of Darcs and Arch checkout - - * buildbot/process/step.py (ShellCommand.describe): add an - alternate .descriptionDone attribute which provides descriptive - text when the step is complete. .description can be ["compiling"], - for use while the step is running, then .descriptionDone can be - ["compile"], used alone when the step succeeds or with "failed" when - it does not. Updated other steps to use the new text. - * buildbot/process/step_twisted.py: same - * buildbot/test/test_run.py: update tests to match - -2004-08-30 Brian Warner <warner@lothar.com> - - * buildbot/process/step.py (ShellCommand.createSummary): fix docs - (CVS.__init__): send 'patch' argument to slave - (CVS.start): don't create the LoggedRemoteCommand until start(), - so we can catch a .patch added after __init__ - (SVN.__init__): add 'patch' to SVN too - (SVN.start): same - - * buildbot/slave/commands.py (ShellCommand): add a 'stdin' - argument, to let commands push data into the process' stdin pipe. - Move usePTY to a per-instance attribute, and clear it if 'stdin' - is in use, since closing a PTY doesn't really affect the process - in the right way (in particular, I couldn't run /usr/bin/patch - under a pty). - (SourceBase.doPatch): handle 'patch' argument - - * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for - both CVS and SVN - - * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo - * buildbot/slave/bot.py (Bot.remote_getCommands): send command - versions to master - * buildbot/master.py (BotPerspective.got_commands): get command - versions from slave, give to each builder - * buildbot/process/builder.py (Builder.attached): stash slave - command versions in .remoteCommands - - * docs/steps.xhtml: bring docs in-line with reality - - * buildbot/process/step.py (CVS.__init__): more brutal - compatibility code removal - (SVN.__init__): same - - * buildbot/slave/commands.py (SlaveShellCommand): update docs - (SlaveShellCommand.start): require ['workdir'] argument, remove - the ['dir'] fallback (compatibility will come later) - (SourceBase): update docs - (SourceBase.start): remove ['directory'] fallback - (CVS): update docs - (SVN): update docs - * buildbot/test/test_config.py (ConfigTest.testBuilders): update test - * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same - * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same - - * buildbot/process/step.py (RemoteShellCommand.__init__): add - want_stdout/want_stderr. remove old 'dir' keyword (to simplify the - code.. I will figure out 0.5.0-compatibility hooks later) - -2004-08-30 Brian Warner <warner@lothar.com> - - * buildbot/process/process_twisted.py: rewrite in terms of new - BuildFactory base class. It got significantly shorter. Yay - negative code days. - - * buildbot/process/step_twisted.py (HLint.start): fix to make it - work with the new "self.build isn't nailed down until we call - step.start()" scheme: specifically, __init__ is called before the - build has decided on which Changes are going in, so we don't scan - build.allFiles() for .xhtml files until start() - (HLint.commandComplete): use getText(), not getStdout() - (RunUnitTests.start): same: don't use .build until start() - (RunUnitTests.describe): oops, don't report (None) when using - the default reactor - (RunUnitTests.commandComplete): use getText() - (RunUnitTests.createSummary): same - (BuildDebs.commandComplete): same - - * buildbot/process/step.py (RemoteShellCommand.__init__): don't - set args['command'] until start(), since our BuildStep is allowed - to change their mind up until that point - (TreeSize.commandComplete): use getText(), not getStdout() - - * docs/examples/twisted_master.cfg: update to current standards - - * docs/factories.xhtml: update - * buildbot/process/factory.py: implement all the common factories - described in the docs. The Trial factory doesn't work yet, and - I've probably broken all the process_twisted.py factories in the - process. There are compatibility classes left in for things like - the old BasicBuildFactory, but subclasses of them are unlikely to - work. - * docs/examples/glib_master.cfg: use new BuildFactories - * docs/examples/hello.cfg: same - - * buildbot/test/test_config.py (ConfigTest.testBuilders): remove - explicit 'workdir' args - - * buildbot/process/base.py (BuildFactory): move factories to .. - * buildbot/process/factory.py (BuildFactory): .. here - * buildbot/process/process_twisted.py: handle move - * buildbot/test/test_config.py: same - * buildbot/test/test_run.py: same - * buildbot/test/test_steps.py: same - * buildbot/test/test_vc.py: same - * docs/factories.xhtml: same - - * NEWS: mention config changes that require updating master.cfg - - * buildbot/process/base.py (Build.setupBuild): add a 'workdir' - argument to all steps that weren't given one already, pointing at - the "build/" directory. - - * docs/examples/hello.cfg: remove explicit 'workdir' args - - * docs/factories.xhtml: document standard BuildFactory clases, - including a bunch which are have not yet been written - -2004-08-29 Brian Warner <warner@lothar.com> - - * buildbot/interfaces.py (IBuildStepStatus.getResults): move - result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to - buildbot.status.builder so they aren't quite so internal - * buildbot/process/base.py, buildbot/process/builder.py: same - * buildbot/process/maxq.py, buildbot/process/step.py: same - * buildbot/process/step_twisted.py, buildbot/status/builder.py: same - * buildbot/status/mail.py, buildbot/test/test_run.py: same - * buildbot/test/test_status.py, buildbot/test/test_vc.py: same - - * buildbot/status/html.py (StatusResourceBuildStep): oops, update - to handle new getLogs()-returns-list behavior - (StatusResourceBuildStep.getChild): same - (StepBox.getBox): same - (WaterfallStatusResource.phase0): same - - * docs/source.xhtml: document how Buildbot uses version-control - systems (output side: how we get source trees) - * docs/changes.xhtml: rename from sources.xhtml, documents VC - systems (input side: how we learn about Changes) - - * buildbot/master.py (Manhole): use ComparableMixin - * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same - * buildbot/changes/mail.py (MaildirSource): same - * buildbot/status/client.py (PBListener): same - * buildbot/status/html.py (Waterfall): same - * buildbot/status/words.py (IRC): same - - * NEWS: start describing new features - - * buildbot/status/mail.py (MailNotifier): finish implementation. - The message body is still a bit sparse. - * buildbot/test/test_status.py (Mail): test it - - * buildbot/util.py (ComparableMixin): class to provide the __cmp__ - and __hash__ methods I wind up adding everywhere. Specifically - intended to support the buildbot config-file update scheme where - we compare, say, the old list of IStatusTargets against the new - one and don't touch something which shows up on both lists. - * buildbot/test/test_util.py (Compare): test case for it - - * buildbot/interfaces.py (IBuildStatus): change .getLogs() to - return a list instead of a dict - (IBuildStepStatus.getLogs): same. The idea is that steps create - logs with vaguely unique names (although their uniqueness is not - guaranteed). Thus a compilation step should create its sole - logfile with the name 'compile', and contribute it to the - BuildStatus. If a step has two logfiles, try to create them with - different names (like 'test.log' and 'test.summary'), and only - contribute the important ones to the overall BuildStatus. - * buildbot/status/builder.py (Event.getLogs): same - (BuildStepStatus): fix default .text and .results - (BuildStepStatus.addLog): switch to list-like .getLogs() - (BuildStepStatus.stepFinished): same - (BuildStatus.text): fix default .text - (BuildStatus.getLogs): temporary hack to return all logs (from all - child BuildStepStatus objects). Needs to be fixed to only report - the significant ones (as contributed by the steps themselves) - * buildbot/test/test_run.py: handle list-like .getLogs() - * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same - -2004-08-28 Brian Warner <warner@lothar.com> - - * buildbot/process/builder.py (Builder.attached): serialize the - attachment process, so the attach-watcher isn't called until the - slave is really available. Add detached watchers too, which makes - testing easier. - - * buildbot/test/test_vc.py: test VC modes (clobber/update/etc) - - * buildbot/test/test_swap.py: remove dead code - - * buildbot/slave/commands.py (ShellCommandPP): add debug messages - (ShellCommand.start): treat errors in _startCommand/spawnProcess - sort of as if the command being run exited with a -1. There may - still be some holes in this scheme. - (CVSCommand): add 'revision' tag to the VC commands, make sure the - -r option appears before the module list - * buildbot/process/step.py (CVS): add 'revision' argument - - * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures - when sending updates or stepComplete messages to the master, since - we don't currently care whether they arrive or not. When we revamp - the master/slave protocol to really resume interrupted builds, - this will need revisiting. - (lostRemote): remove spurious print - - * buildbot/master.py (BotPerspective.attached): serialize the - new-builder interrogation process, to make testing easier - (BotMaster.waitUntilBuilderDetached): convenience function - - * buildbot/status/builder.py (BuilderStatus): prune old builds - (BuildStatus.pruneSteps): .. and steps - (BuildStepStatus.pruneLogs): .. and logs - (BuilderStatus.getBuild): handle missing builds - * buildbot/status/html.py (StatusResourceBuild.body): display build - status in the per-build page - (BuildBox.getBox): color finished builds in the per-build box - -2004-08-27 Brian Warner <warner@lothar.com> - - * buildbot/status/mail.py (MailNotifier): new notification class, - not yet finished - - * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into - variants of a common base class which handles all the mode= logic - - * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add - convenience method - * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same - -2004-08-26 Brian Warner <warner@lothar.com> - - * buildbot/test/test_slavecommand.py: accomodate new slavecommand - interfaces - - * buildbot/test/test_run.py: update to new Logfile interface, new - buildbot.slave modules - * buildbot/test/test_steps.py: same, remove Swappable, add timeouts - - * MANIFEST.in: new sample config file - * docs/examples/hello.cfg: same - - * buildbot/process/step_twisted.py: remove dead import - - * buildbot/process/step.py (RemoteCommand.run): catch errors - during .start - (RemoteCommand.remote_update): ignore updates that arrive after - we've shut down - (RemoteCommand.remote_complete): ignore duplicate complete msgs - (RemoteCommand._remoteComplete): cleanup failure handling, reduce - the responsibilities of the subclass's methods - (BuildStep.failed): catch errors during failure processing - (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures) - (CVS): move to a mode= argument (described in docstring), rather - than the ungainly clobber=/export=/copydir= combination. - (SVN): add mode= functionality to SVN too - (todo_Darcs, todo_Arch, todo_P4): placeholders for future work - - * buildbot/process/base.py (Build.startNextStep): catch errors - during s.startStep() - - * buildbot/clients/base.py: update to new PB client interface. - gtkPanes is still broken - - * buildbot/bot.py, buildbot/slavecommand.py: move to.. - * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory - * setup.py: add buildbot.slave module - * buildbot/bb_tap.py: handle move - * buildbot/slave/registry.py: place to register commands, w/versions - * buildbot/slave/bot.py: major simplifications - (SlaveBuilder.remote_startCommand): use registry for slave commands, - instead of a fixed table. Eventually this will make the slave more - extensible. Use 'start' method on the command, not .startCommand. - Fix unsafeTracebacks handling (I think). - * buildbot/slave/commands.py: major cleanup. ShellCommand is now a - helper class with a .start method that returns a Deferred. - SlaveShellCommand is the form reached by the buildmaster. Commands - which use multiple ShellCommands can just chain them as Deferreds, - with some helper methods in Command (_abandonOnFailure and - _checkAbandoned) to bail on rc!=0. - (CVSCommand): prefer new mode= argument - (SVNFetch): add mode= argument - - * buildbot/master.py (DebugPerspective.perspective_forceBuild): - put a useful reason string on the build - - * buildbot/status/builder.py (LogFile): do LogFile right: move the - core functionality into an IStatusLog object - (BuildStatus.sendETAUpdate): don't send empty build-eta messages - * buildbot/status/html.py (TextLog): HTML-rendering goes here - (StatusResourceBuild.body): use proper accessor methods - * buildbot/status/client.py (RemoteLog): PB-access goes here - (StatusClientPerspective.perspective_subscribe): add "full" mode, - which delivers log contents too - (PBListener.__cmp__): make PBListeners comparable, thus removeable - * buildbot/status/event.py: remove old Logfile completely - - * buildbot/interfaces.py (IStatusLog.subscribe): make the - subscription interface for IStatusLog subscriptions just like all - other the status subscriptions - (IStatusReceiver.logChunk): method called on subscribers - -2004-08-24 Brian Warner <warner@lothar.com> - - * buildbot/process/builder.py (Builder._pong): oops, ping response - includes a result (the implicit None returned by remote_print). - Accept it so the _pong method handles the response correctly. - -2004-08-06 Brian Warner <warner@lothar.com> - - * buildbot/test/test_config.py: update IRC, PBListener tests - - * buildbot/status/client.py (StatusClientPerspective): total - rewrite to match new IStatus interfaces. New subscription scheme. - There are still a few optimizations to make (sending down extra - information with event messages so the client doesn't have to do a - round trip). The logfile-retrieval code is probably still broken. - Moved the PB service into its own port, you can no longer share a - TCP socket between a PBListener and, say, the slaveport (this - should be fixed eventually). - * buildbot/clients/base.py (Client): revamp to match. still needs - a lot of work, but basic event reporting works fine. gtkPanes is - completely broken. - - * buildbot/status/words.py (IRC): move to c['status']. Each IRC - instance talks to a single irc server. Threw out all the old - multi-server handling code. Still need to add back in - builder-control (i.e. "force build") - - * buildbot/status/html.py (StatusResourceBuildStep.body): add some - more random text to the as-yet-unreachable per-step page - - * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate): - rename to stepETAUpdate - (BuildStatus.subscribe): add build-wide ETA updates - (BuilderStatus.getState): remove more cruft - (BuilderStatus.getCurrentBuild): remove more cruft - (BuilderStatus.buildStarted): really handle tuple-subscription - * buildbot/test/test_run.py (Status.testSlave): handle the - stepETAUpdate rename - - * buildbot/master.py (BuildMaster): don't add a default - StatusClientService. Don't add a default IrcStatusFactory. Both - are now added through c['status'] in the config file. c['irc'] is - accepted for backwards compatibility, the only quirk is you cannot - use c['irc'] to specify IRC servers on ports other than 6667. - - * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method - (IStatusReceiver.buildStarted): allow update-interval on subscribe - (IStatusReceiver.buildETAUpdate): send build-wide ETA updates - (IStatusReceiver.stepETAUpdate): rename since it's step-specific - - - * buildbot/master.py (BuildMaster.startService): SIGHUP now causes - the buildmaster to re-read its config file - - - * buildbot/test/test_web.py (test_webPortnum): need a new hack to - find out the port our server is running on - (WebTest.test_webPathname_port): same - - * buildbot/test/test_config.py (testWebPortnum): test it - (testWebPathname): ditto - - * docs/config.xhtml: document new c['status'] configuration option - - * buildbot/status/html.py (Waterfall): new top-level class which - can be added to c['status']. This creates the Site as well as the - necessary TCPServer/UNIXServer. It goes through the BuildMaster, - reachable as .parent, for everything. - - * buildbot/master.py (Manhole): make it a normal service Child - (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and - webPathname. It will eventually replace c['irc'] and the implicit - PB listener as well. c['webPortnum'] and c['webPathname'] are left - in as (deprecated) backward compatibility hooks for now. - - - * buildbot/process/builder.py (Builder.buildFinished): don't - inform out builder_status about a finished build, as it finds out - through its child BuildStatus object - - * buildbot/status/html.py: extensive revamp. Use adapters to make - Boxes out of BuildStepStatus and friends. Acknowledge that Steps - have both starting and finishing times and adjust the waterfall - display accordingly, using spacers if necessary. Use SlaveStatus - to get buildslave info. - (StatusResourceBuildStep): new just-one-step resource, used to get - logfiles. No actual href to it yet. - - * buildbot/status/event.py (Logfile.doSwap): disable Swappable for - the time being, until I get the file-naming scheme right - - * buildbot/status/builder.py (Event): clean started/finished names - (BuildStatus.isFinished): .finished is not None is the right test - (BuildStatus.buildStarted): track started/finished times ourselves - (BuilderStatus.getSlave): provide access to SlaveStatus object - (BuilderStatus.getLastFinishedBuild): all builds are now in - .builds, even the currently-running one. Accomodate this change. - (BuilderStatus.eventGenerator): new per-builder event generator. - Returns BuildStepStatus and BuildStatus objects, since they can - both be adapted as necessary. - (BuilderStatus.addEvent): clean up started/finished attributes - (BuilderStatus.startBuild,finishBuild): remove dead code - (SlaveStatus): new object to provide ISlaveStatus - - * buildbot/process/step.py (ShellCommand.getColor): actually - return the color instead of setting it ourselves - (CVS.__init__): pull .timeout and .workdir options out of - **kwargs, since BuildStep will ignore them. Without this neither - will be sent to the slave correctly. - (SVN.__init__): same - - * buildbot/process/builder.py (Builder): move flags to class-level - attributes - (Builder.attached): remove .remoteInfo, let the BotPerspective and - SlaveStatus handle that - - * buildbot/process/base.py (Build.firstEvent): remove dead code - (Build.stopBuild): bugfix - - * buildbot/changes/pb.py (PBChangeSource.describe): add method - - * buildbot/changes/changes.py (Change): add IStatusEvent methods - (ChangeMaster.eventGenerator): yield Changes, since there are now - Adapters to turn them into HTML boxes - - * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster - (BotPerspective.attached): feed a SlaveStatus object - (BuildMaster.loadConfig): add a manhole port (debug over telnet) - (BuildMaster.loadConfig_Builders): give BuilderStatus a parent - - * buildbot/interfaces.py: API additions - (ISlaveStatus): place to get slave status - -2004-08-04 Brian Warner <warner@lothar.com> - - * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when - the delay finishes, so the step is marked as SUCCESS - - * buildbot/test/test_run.py (Status.testSlave): cover more of - IBuildStatus and IBuildStepStatus - - * buildbot/status/progress.py (StepProgress): move some flags to - class-level attributes - (StepProgress.remaining): if there are no other progress metrics - to go by, fall back to elapsed time - (StepProgress.setExpectations): take a dict of metrics instead of - a list - (BuildProgress.setExpectationsFrom): pull expectations from the - Expectations, instead of having it push them to the BuildProgress - (Expectations): move some flags to class-level attributes - (Expectations.__init__): copy per-step times from the - BuildProgress too - (Expectations.expectedBuildTime): new method for per-build ETA - - * buildbot/status/event.py (Logfile): move some flags to - class-level attributes - (Logfile.logProgressTo): better method name, let step set the - progress axis name (instead of always being "output") - - * buildbot/status/builder.py (BuildStepStatus.getTimes): track the - times directly, rather than depending upon the (possibly missing) - .progress object. Use 'None' to indicate "not started/finished - yet" - (BuildStepStatus.getExpectations): oops, return the full list of - expectations - (BuilderStatus._buildFinished): append finished builds to .builds - - * buildbot/process/step.py (BuildStep): add separate .useProgress - flag, since empty .progressMetrics[] still implies that time is a - useful predictor - (CVS): set up the cmd in __init__, instead of waiting for start() - - * buildbot/process/base.py (Build.startBuild): disable the 'when' - calculation, this will eventually turn into a proper sourceStamp - (Build.setupBuild): tell the Progress to load from the Expectations, - instead of having the Expectations stuff things into the Progress - (Build.buildException): add a build-level errback to make sure the - build's Deferred fires even in case of exceptions - - * buildbot/master.py (BotMaster.forceBuild): convey the reason into - the forced build - * buildbot/process/builder.py (Builder.forceBuild): convey the - reason instead of creating a fake Change - - * docs/examples/twisted_master.cfg: update to match reality - - * buildbot/test/test_config.py, buildbot/test/test_process.py: - * buildbot/test/test_run.py, buildbot/test/test_steps.py: - fix or remove broken/breaking tests - - * buildbot/status/event.py (Logfile.__len__): remove evil method - - * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate - missing .build, for test convenience - - * buildbot/process/step_twisted.py: import fixes - - * buildbot/process/step.py (BuildStep.failed): exception is FAILURE - - * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover - .statusbag reference - - * buildbot/bot.py (BuildSlave.stopService): tear down the TCP - connection at shutdown, and stop it from reconnecting - - * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to - chase down remote-execution bugs - - * buildbot/process/step.py: more fixes, remove - BuildStep.setStatus() - * buildbot/status/builder.py: move setStatus() functionality into - BuildStatus.addStep - * buildbot/status/event.py: minor fixes - -2004-08-03 Brian Warner <warner@lothar.com> - - * buildbot/process/base.py, buildbot/process/builder.py - * buildbot/process/step.py, buildbot/status/builder.py - * buildbot/status/event.py, buildbot/test/test_run.py: - fix status delivery, get a basic test case working - * buildbot/master.py: finish implementing basic status delivery, - temporarily disable HTML/IRC/PB status sources - - * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise - - * buildbot/status/progress.py (BuildProgress): remove dead code - - * buildbot/interfaces.py - * buildbot/process/base.py, buildbot/process/builder.py - * buildbot/process/step.py, buildbot/process/step_twisted.py - * buildbot/status/builder.py: Complete overhaul of the all - status-delivery code, unifying all types of status clients (HTML, - IRC, PB). See interfaces.IBuildStatus for an idea of what it will - look like. This commit is a checkpointing of the work-in-progress: - the input side is mostly done (Builders/Builds sending status - to the BuilderStatus/BuildStatus objects), but the output side has - not yet been started (HTML resources querying BuilderStatus - objects). Things are probably very broken right now and may remain - so for several weeks, I apologize for the disruption. - - * buildbot/status/event.py: add a setHTML method to use pre-rendered - HTML as the log's contents. Currently used for exception tracebacks. - * buildbot/status/progress.py: minor spelling changes - -2004-08-02 Brian Warner <warner@lothar.com> - - * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable - in mozilla. Also added stylesheets copied from Twisted's docs. - Remember that these files are meant to be run through Lore first. - Thanks to Philipp Frauenfelder for the fixes. - * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same - * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same - * docs/template.tpl: added a Lore template - -2004-07-29 Brian Warner <warner@lothar.com> - - * buildbot/interfaces.py: revamp status delivery. This is the - preview: these are the Interfaces that will be provided by new - Builder code, and to which the current HTML/IRC/PB status - displayers will be adapted. - - * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY - on the SlaveBuilder, not the Bot. - * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to - SlaveBuilder.usePTY - * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY): - set .usePTY on the FakeSlaveBuilder - -2004-07-25 Brian Warner <warner@lothar.com> - - * buildbot/changes/freshcvs.py: add some debug log messages - (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the - disabled 'setFilter' syntax - (FreshCVSSourceNewcred.__init__): warn about prefix= values that - don't end with a slash - - * buildbot/process/base.py (Builder._pong_failed): add TODO note - - * setup.py: bump to 0.5.0+ while between releases - -2004-07-23 Brian Warner <warner@lothar.com> - - * setup.py (version): Releasing buildbot-0.5.0 - -2004-07-23 Brian Warner <warner@lothar.com> - - * README: update for 0.5.0 release - - * NEWS: update for 0.5.0 release - -2004-07-22 Brian Warner <warner@lothar.com> - - * buildbot/slavecommand.py (ShellCommand): make usePTY a - mktap-time configuration flag (--usepty=1, --usepty=0) - * buildbot/bot.py: same - - * buildbot/master.py (BotPerspective.got_dirs): don't complain about - an 'info' directory being unwanted - - * buildbot/changes/freshcvs.py (FreshCVSSource): flip the - newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now - the default. To communicate with an oldcred daemond (CVSToys-1.0.9 - and earlier), use a FreshCVSSourceOldcred instead. - (test): simple test routine: connect to server, print changes - - * buildbot/changes/changes.py (Change.getTime): make it possible - to print un-timestamped changes - - * buildbot/master.py (makeApp): delete ancient dead code - (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable - * buildbot/test/test_config.py (testFindConfigFile): test it - - * docs/examples/twisted_master.cfg (b22w32): use iocp reactor - instead of win32 one - - - * buildbot/master.py (BuildMaster.loadConfig_Builders): config file - now takes a dictionary instead of a tuple. See docs/config.xhtml for - details. - - * buildbot/process/base.py (Builder.__init__): change constructor - to accept a dictionary of config data, rather than discrete - name/slave/builddir/factory arguments - - * docs/examples/twisted_master.cfg: update to new syntax - * docs/examples/glib_master.cfg: same - * buildbot/test/test_config.py (ConfigTest.testBuilders): some - rough tests of the new syntax - - - * buildbot/master.py (BuildMaster.loadConfig): allow webPathname - to be an int, which means "run a web.distrib sub-server on a TCP - port". This lets you publish the buildbot status page to a remote - twisted.web server (using distrib.ResourceSubscription). Also - rename the local attributes used to hold these web things so - they're more in touch with reality. - * buildbot/test/test_web.py: test webPortnum and webPathname - * docs/config.xhtml: document this new use of webPathname - - * docs/config.xhtml: new document, slightly ahead of reality - - * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix - 'prefix' handling: treat it as a simple string to check with - .startswith, instead of treating it as a directory. This allows - sub-directories to be used. If you use prefix=, you should give it - a string that starts just below the CVSROOT and ends with a slash. - This prefix will be stripped from all filenames, and filenames - which do not start with it will be ignored. - -2004-07-20 Cory Dodt <corydodt@twistedmatrix.com> - - * contrib/svn_buildbot.py: Add --include (synonym for --filter) - and --exclude (inverse of --include). SVN post-commit hooks - now have total control over which changes get sent to buildbot and which - do not. - -2004-07-10 Brian Warner <warner@lothar.com> - - * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix - test case to match new API - - * buildbot/status/event.py (Logfile.getEntries): fix silly bug - which crashed HTML display when self.entries=[] (needed to - distinguish between [], which means "no entries yet", and None, - which means "the entries have been swapped out to disk, go fetch - them"). - -2004-07-04 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (countFailedTests): Count - skips, expectedFailures, and unexpectedSuccesses. Start scanning - 10kb from the end because any import errors are wedged there and - they would make us think the test log was unparseable. - (RunUnitTests.finishStatus): add skip/todo counts to the event box - -2004-06-26 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (RemovePYCs): turn the - delete-*.pyc command into an actual BuildStep, so we can label it - nicely - * buildbot/process/process_twisted.py (QuickTwistedBuildFactory): - (FullTwistedBuildFactory): same - -2004-06-25 Cory Dodt <corydodt@twistedmatrix.com> - - * contrib/fakechange.py: Add an errback when sending the fake - change, so we know it didn't work. - -2004-06-25 Christopher Armstrong <radix@twistedmatrix.com> - - * buildbot/process/step_twisted.py: Delete *.pyc files before - calling trial, so it doesn't catch any old .pyc files whose .py - files have been moved or deleted. - - * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new - parameter, 'recurse', that passes -R to trial. 2) have 'runAll' - imply 'recurse'. 3) Make the default 'allTests' be ["twisted"] - instead of ["twisted.test"], so that the end result is "trial -R - twisted". - - * contrib/svn_buildbot.py: Add a --filter parameter that accepts a - regular expression to match filenames that should be ignored when - changed. Also add a --revision parameter that specifies the - revision to examine, which is useful for debugging. - -2004-06-25 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (trialTextSummarizer): create a - summary of warnings (like DeprecationWarnings), next to the - "summary" file - -2004-05-13 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.cfg: enable the win32 builder, as - we now have a w32 build slave courtesy of Mike Taylor. - - * buildbot/process/base.py (Build.checkInterlocks): OMG this was - so broken. Fixed a race condition that tripped up interlocked - builds and caused the status to be stuck at "Interlocked" forever. - The twisted buildbot's one interlocked build just so happened to - never hit this case until recently (the feeding builds both pass - before the interlocked build is attempted.. usually it has to wait - a while). - (Builder._pong_failed): fix method signature - - * setup.py: bump to 0.4.3+ while between releases - -2004-04-30 Brian Warner <warner@lothar.com> - - * setup.py (version): Releasing buildbot-0.4.3 - -2004-04-30 Brian Warner <warner@lothar.com> - - * MANIFEST.in: add the doc fragments in docs/*.xhtml - - * README: update for 0.4.3 release - - * NEWS: update for 0.4.3 release - - * buildbot/master.py (BuildMaster.__getstate__): make sure - Versioned.__getstate__ is invoked, for upgrade from 0.4.2 - - * buildbot/process/step_twisted.py (RunUnitTests.trial): add - .trial as a class attribute, for upgrade from 0.4.2 - - * buildbot/changes/changes.py (Change.links): add .links for - upgrade from 0.4.2 - - * buildbot/status/event.py (Logfile.__getstate__): get rid of both - .textWatchers and .htmlWatchers at save time, since they are both - volatile, should allow smooth 0.4.2 upgrade - - * buildbot/process/step.py (CVS.finishStatus): catch failed - CVS/SVN commands so we can make the status box red - -2004-04-29 Brian Warner <warner@lothar.com> - - * buildbot/changes/freshcvs.py - (FreshCVSConnectionFactory.gotPerspective): add (commented-out) - code to do setFilter(), which tells the freshcvs daemon to not - send us stuff that we're not interested in. I will uncomment it - when a new version of CVSToys is available in which setFilter() - actually works, and I get a chance to test it better. - - * docs/examples/twisted_master.cfg: start using a PBChangeSource - - * buildbot/master.py (Dispatcher): use a registration scheme - instead of hardwired service names - (BuildMaster): keep track of the Dispatcher to support - registration - - * buildbot/changes/changes.py (ChangeMaster): create a distinct - PBChangeSource class instead of having it be an undocumented - internal feature of the ChangeMaster. Split out the code into a - new file. - * buildbot/changes/pb.py (PBChangeSource): same - * buildbot/test/test_changes.py: a few tests for PBChangeSource - - * docs/{factories|sources|steps}.xhtml: document some pieces - - * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop - using FCMaildirSource - (f23osx): update OS-X builder to use python2.3, since the slave - was updated to Panther (10.3.3) - -2004-03-21 Brian Warner <warner@lothar.com> - - * buildbot/process/process_twisted.py: factor out doCheckout, change - to use SVN instead of CVS - - * buildbot/process/base.py (BasicBuildFactory): refactor to make - an SVN subclass easier - (BasicSVN): subclass which uses Subversion instead of CVS - -2004-03-15 Christopher Armstrong <radix@twistedmatrix.com> - - * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead - of /bin/sh on win32 - (CVSCommand.cvsComplete): don't assume chdir worked on win32 - -2004-02-25 Brian Warner <warner@lothar.com> - - * buildbot/slavecommand.py (ShellCommand): ['commands'] argument - is now either a list (which is passed to spawnProcess directly) or - a string (which gets passed to /bin/sh -c). This removes the useSH - flag and the ArgslistCommand class. Also send status header at the - start and end of each command, instead of having the master-side - code do that. - (CVSCommand): fix the doUpdate command, it failed to do the 'cp - -r'. Update to use list-based arguments. - (SVNFetch): use list-based arguments, use ['dir'] argument to - simplify code. - * buildbot/test/test_steps.py (Commands): match changes - - * buildbot/process/step.py (InternalShellCommand.words): handle - command lists - (SVN): inherit from CVS, cleanup - - * buildbot/status/event.py (Logfile.content): render in HTML, with - stderr in red and headers (like the name of the command we're - about to run) in blue. Add link to a second URL (url + "?text=1") - to get just stdout/stderr in text/plain without markup. There is - still a problem with .entries=None causing a crash, it seems to occur - when the logfile is read before it is finished. - - * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second - timeout to the keepalives, and use it to explicitly do a - loseConnection instead of waiting for TCP to notice the loss. This - ought to clear up the silent-lossage problem. - (unsafeTracebacks): pass exception tracebacks back to the master, - makes it much easier to debug problems - -2004-02-23 Brian Warner <warner@lothar.com> - - * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass - the whole command to /bin/sh instead of execve [Johan Dahlin] - (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing - '-r HEAD' [Johan Dahlin] - (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin] - - * buildbot/changes/changes.py (Change): add links= argument, add - asHTML method [Johan Dahlin]. Modified to make a bit more - XHTMLish. Still not sure how to best use links= . - - * buildbot/status/html.py (StatusResourceCommits.getChild): use - Change.asHTML to display the change, not asText - - * buildbot/status/html.py (StatusResourceBuilder): web button to - ping slave - - * buildbot/test/test_run.py: test to actually start a buildmaster - and poke at it - - * MANIFEST.in: bring back accidentally-dropped test helper files - - * buildbot/test/test_config.py (ConfigTest.testSources): skip tests - that require cvstoys if it is not installed - - * buildbot/process/step_twisted.py (RunUnitTests): allow other - values of "bin/trial" [Dave Peticolas] - (RunUnitTests.finishStatus): say "no tests run" instead of "0 - tests passed" when we didn't happen to run any tests - - * buildbot/process/step.py (Compile): use haltOnFailure instead of - flunkOnFailure [Johan Dahlin] - - * buildbot/process/base.py (ConfigurableBuild.setSteps): allow - multiple instances of the same Step class by suffixing "_2", etc, - to the name until it is unique. This name needs to be unique - because it is used as a key in the dictionary that tracks build - progress. - * buildbot/test/test_steps.py (Steps.testMultipleStepInstances): - add test for it - - * buildbot/process/base.py (Builder.ping): add "ping slave" command - -2004-01-14 Brian Warner <warner@lothar.com> - - * buildbot/status/words.py (IrcStatusBot): when we leave or get - kicked from a channel, log it - - * buildbot/master.py (Dispatcher): add "poke IRC" command to say - something over whatever IRC channels the buildmaster is currently - connected to. Added to try and track down a problem in which the - master thinks it is still connected but the IRCd doesn't see it. I - used a styles.Versioned this time, so hopefully users won't have - to rebuild their .tap files this time. - * contrib/debug.glade: add a "Poke IRC" button - * contrib/debugclient.py: same - - * setup.py: bump to 0.4.2+ while between releases - -2004-01-08 Brian Warner <warner@lothar.com> - - * setup.py (version): Releasing buildbot-0.4.2 - -2004-01-08 Brian Warner <warner@lothar.com> - - * NEWS: update for 0.4.2 release - - * README: document how to run the tests, now that they all pass - - * buildbot/changes/maildir.py (Maildir.poll): minor comment - - * buildbot/process/step.py (CVS): add a global_options= argument, - which lets you set CVS global options for the command like "-r" - for read-only checkout, or "-R" to avoid writing in the - repository. - * buildbot/slavecommand.py (CVSCommand): same - - * buildbot/status/event.py (Logfile): add a .doSwap switch to make - testing easier (it is turned off when testing, to avoid the - leftover timer) - - * buildbot/process/step.py (InternalBuildStep): shuffle code a bit - to make it easier to test: break generateStepID() out to a - separate function, only update statusbag if it exists. - (ShellCommands): create useful text for dict-based commands too. - - * test/*, buildbot/test/*: move unit tests under the buildbot/ - directory - * setup.py (packages): install buildbot.test too - - * buildbot/test/test_slavecommand.py: fix it, tests pass now - * buildbot/test/test_steps.py: fix it, tests pass now - -2004-01-06 Brian Warner <warner@lothar.com> - - * buildbot/changes/mail.py (parseFreshCVSMail): looks like new - freshcvs mail uses a slightly different syntax for new - directories. Update parser to handle either. - * test/test_mailparse.py (Test1.testMsg9): test for same - -2003-12-21 Brian Warner <warner@lothar.com> - - * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set - 'warnOnWarnings' so that lintian errors mark the build orange - -2003-12-17 Brian Warner <warner@lothar.com> - - * buildbot/changes/mail.py (parseBonsaiMail): parser for commit - messages emitted by Bonsai, contributed by Stephen Davis. - - * test/*: moved all tests to use trial instead of unittest. Some - still fail (test_steps, test_slavecommand, and test_process). - - * setup.py (version): bump to 0.4.1+ while between releases - -2003-12-09 Brian Warner <warner@lothar.com> - - * setup.py (version): Releasing buildbot-0.4.1 - -2003-12-09 Brian Warner <warner@lothar.com> - - * NEWS: update for 0.4.1 release - - * docs/examples/twisted_master.cfg: add netbsd builder, shuffle - freebsd builder code a little bit - - * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__): - don't try to compare attributes of different classes - * buildbot/changes/mail.py (MaildirSource.__cmp__): same - (MaildirSource.messageReceived): fix Change delivery - - * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir' - into the config file's namespace before loading it, like the - documentation claims it does - * docs/examples/twisted_master.cfg: remove explicit 'basedir' - (useFreshCVS): switch to using a maildir until Twisted's freshcvs - daemon comes back online - -2003-12-08 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.cfg: provide an explicit 'basedir' - so the example will work with online=0 as well - - * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource): - fix the __implements__ line - - * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this - class a twisted.application.service.Service, use startService to - get it moving. - - * buildbot/changes/dnotify.py (DNotify): use os.open to get the - directory fd instead of simple open(). I'm sure this used to work, - but the current version of python refuses to open directories with - open(). - -2003-12-05 Brian Warner <warner@lothar.com> - - * setup.py (version): bump to 0.4.0+ while between releases - -2003-12-05 Brian Warner <warner@lothar.com> - - * setup.py (version): Releasing buildbot-0.4.0 - -2003-12-05 Brian Warner <warner@lothar.com> - - * docs/examples/glib_master.cfg: replace old sample scripts with - new-style config files - * MANIFEST.in: include .cfg files in distribution tarball - - * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye): - implement a dummy method to avoid the exception that occurs when - freshcvs sends this to us. - - * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory): - removed the method, as it broke reconnection. Apparently - stopFactory is called each time the connection attempt fails. Must - rethink this. - (ReconnectingPBClientFactory.__getstate__): squash the _callID - attribute before serialization, since without stopFactory the - reconnect timer may still be active and they aren't serializable. - - * test/test_mailparse.py (ParseTest): test with 'self' argument - - * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self' - argument, as these "functions" are invoked like methods from class - attributes and therefore always get an instance as the first - argument. - - * buildbot/changes/maildir.py (Maildir.start): fix error in error - message: thanks to Stephen Davis for the catch - -2003-12-04 Brian Warner <warner@lothar.com> - - * buildbot/pbutil.py: complete rewrite using PBClientFactory and - twisted's standard ReconnectingClientFactory. Handles both oldcred - and newcred connections. Also has a bug-workaround for - ReconnectingClientFactory serializing its connector when it - shouldn't. - - * buildbot/bot.py (BotFactory): rewrite connection layer with new - pbutil. Replace makeApp stuff with proper newcred/mktap - makeService(). Don't serialize Ephemerals on shutdown. - - * buildbot/changes/changes.py (ChangeMaster): make it a - MultiService and add the sources as children, to get startService - and stopService for free. This also gets rid of the .running flag. - - * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use - new pbutil, turn into a TCPClient at the same time (to get - startService for free). Two variants exist: FreshCVSSourceOldcred - and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred - yet, but when it does, we'll be ready). - (FreshCVSSource.notify): handle paths which are empty after the - prefix is stripped. This only happens when the top-level (prefix) - directory is added, at the very beginning of a Repository's life. - - * buildbot/clients/base.py: use new pbutil, clean up startup code. - Now the only reconnecting code is in the factory where it belongs. - (Builder.unsubscribe): unregister the disconnect callback when we - delete the builder on command from the master (i.e. when the - buildmaster is reconfigured and that builder goes away). This - fixes a multiple-delete exception when the status client is shut - down afterwards. - * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the - base Client. - - * buildbot/status/words.py (IrcStatusBot): add some more sillyness - (IrcStatusBot.getBuilderStatus): fix minor exception in error message - -2003-10-20 Christopher Armstrong <radix@twistedmatrix.com> - - * contrib/run_maxq.py: Accept a testdir as an argument rather than - a list of globs (ugh). The testdir will be searched for files - named *.tests and run the tests in the order specified in each of - those files. This allows for "dependancies" between tests to be - codified. - - * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir - argument to pass to run_maxq.py, instead of a glob. - -2003-10-17 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml - files that live in the sandbox - -2003-10-15 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (ProcessDocs.finished): fix - spelling error in "docs" count-warnings output - (HLint.start): stupid thinko meant .xhtml files were ignored - - * docs/examples/twisted_master.cfg (reactors): disable cReactor - tests now that cReactor is banished to the sandbox - -2003-10-10 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted - scheme: now .xhtml are sources and .html are generated - -2003-10-08 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops, - we were ignoring the 'randomly' parameter. - -2003-10-01 Brian Warner <warner@lothar.com> - - * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on - posix, to kill sub-children of aborted slavecommands. - - * buildbot/status/builder.py: rename Builder to BuilderStatus. - Clean up initialization: lastBuildStatus remains None until the - first build has been completed. - - * buildbot/status/html.py (WaterfallStatusResource.body): handle - None as a lastBuildStatus - * buildbot/clients/gtkPanes.py: same - - * buildbot/status/client.py (StatusClientService): keep - BuilderStatus objects in self.statusbags . These objects now live - here in the StatusClientService and are referenced by the Builder - object, rather than the other way around. - * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same - * buildbot/process/base.py (Builder): same - * test/test_config.py (ConfigTest.testBuilders): same - - * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying - an existing builder, leave the statusbag alone. This will preserve the - event history. - - * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred - hook. This will probably go away in favor of a class in upcoming - Twisted versions. - - * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old - serviceName from newcred FreshCVSNotifiee setup - -2003-09-29 Brian Warner <warner@lothar.com> - - * buildbot/process/process_twisted.py: switch to new reactor - abbreviations - * docs/examples/twisted_master.cfg: same - - * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement - - * buildbot/status/words.py (IrcStatusBot.getBuilder): use the - botmaster reference instead of the oldapp service lookup - - * buildbot/master.py (BuildMaster.__init__): give the - StatusClientService a reference to the botmaster to make it easier to - force builds - -2003-09-24 Christopher Armstrong <radix@twistedmatrix.com> - - * buildbot/status/html.py (Box.td): escape hreffy things so you - can have spaces in things like builder names - (StatusResourceBuilder.body) - (WaterfallStatusResource.body) - (WaterfallStatusResource.body0): same - -2003-09-25 Brian Warner <warner@lothar.com> - - * buildbot/master.py (BuildMaster.loadConfig_Builders): don't - rearrange the builder list when adding or removing builders: keep - them in the order the user requested. - * test/test_config.py (ConfigTest.testBuilders): verify it - - * contrib/debug.glade: give the debug window a name - - * buildbot/process/base.py (Builder.buildTimerFired): builders can - now wait on multiple interlocks. Fix code relating to that. - (Builder.checkInterlocks): same - * buildbot/status/builder.py (Builder.currentlyInterlocked): same - - * buildbot/master.py (BuildMaster.loadConfig): move from - deprecated pb.BrokerFactory to new pb.PBServerFactory - * test/test_config.py (ConfigTest.testWebPathname): same - - * docs/examples/twisted_master.cfg: fix interlock declaration - - * buildbot/master.py (BotMaster.addInterlock): move code to attach - Interlocks to their Builders into interlock.py . - (BuildMaster.loadConfig_Interlocks): fix interlock handling - - * test/test_config.py (ConfigTest.testInterlocks): validate - interlock handling - - * buildbot/process/base.py (Builder.__init__): better comments - * buildbot/process/interlock.py (Interlock.__repr__): same - (Interlock.deactivate): add .active flag, move the code that - attaches/detaches builders into the Interlock - -2003-09-24 Christopher Armstrong <radix@twistedmatrix.com> - - * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ - tests using the new run_maxq.py script, and reporting failures by - parsing its output. - - * contrib/run_maxq.py: Hacky little script for running a set of maxq - tests, reporting their success or failure in a buildbot-friendly - manner. - -2003-09-24 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.cfg: example of a new-style config - file. This lives in the buildmaster base directory as - "master.cfg". - - * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload' - button to make the master re-read its config file - - * buildbot/master.py (BuildMaster.loadConfig): new code to load - buildmaster configuration from a file. This file can be re-read - later, and the buildmaster will update itself to match the new - desired configuration. Also use new Twisted Application class. - * test/Makefile, test/test_config.py: unit tests for same - - * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make - FreshCVSSources comparable, to support reload. - * buildbot/changes/mail.py (MaildirSource.__cmp__): same - - * buildbot/process/base.py (Builder): make them comparable, make - Interlocks easier to attach, to support reload. Handle - re-attachment of remote slaves. - * buildbot/process/interlock.py (Interlock): same - - * buildbot/bot.py, bb_tap.py, changes/changes.py: move to - Twisted's new Application class. Requires Twisted >= 1.0.8 . - buildmaster taps are now constructed with mktap. - * buildbot/status/client.py (StatusClientService): same - - * buildbot/status/words.py: move to new Services, add support to - connect to multiple networks, add reload support, allow nickname - to be configured on a per-network basis - -2003-09-20 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.py (twisted_app): use python2.3 for - the freebsd builder, now that the machine has been upgraded and no - longer has python2.2 - - * setup.py (version): bump to 0.3.5+ while between releases - -2003-09-19 Brian Warner <warner@lothar.com> - - * setup.py (version): Releasing buildbot-0.3.5 - -2003-09-19 Brian Warner <warner@lothar.com> - - * NEWS: add post-0.3.4 notes - - * README (REQUIREMENTS): note twisted-1.0.7 requirement - - * MANIFEST.in: add contrib/* - - * docs/examples/twisted_master.py (twisted_app): all build slaves must - use a remote root now: cvs.twistedmatrix.com - - * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update - to newcred - (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for - compatibility with old servers - (FreshCVSSource.start): and provide a way to use it - (FreshCVSNotifiee.disconnect): handle unconnected notifiee - - * docs/examples/twisted_master.py (twisted_app): update to new - makeApp interface. - (twisted_app): listen on new ~buildbot socket - (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com - - * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps - to reduce cvs bandwidth (update instead of full checkout) - -2003-09-11 Brian Warner <warner@lothar.com> - - * contrib/fakechange.py: demo how to connect to the changemaster - port. You can use this technique to submit changes to the - buildmaster from source control systems that offer a hook to run a - script when changes are committed. - - * contrib/debugclient.py: tool to connect to the debug port. You - can use it to force builds, submit fake changes, and wiggle the - builder state - - * buildbot/master.py: the Big NewCred Reorganization. Use a single - 'Dispatcher' realm to handle all the different kinds of - connections and Perspectives: buildslaves, the changemaster port, - the debug port, and the status client port. NewCredPerspectives - now have .attached/.detached methods called with the remote 'mind' - reference, much like old perspectives did. All the pb.Services - turned into ordinary app.ApplicationServices . - (DebugService): went away, DebugPerspectives are now created - directly by the Dispatcher. - (makeApp): changed interface a little bit - - * buildbot/changes/changes.py: newcred - * buildbot/status/client.py: newcred - - * buildbot/clients/base.py: newcred client side changes - * buildbot/bot.py: ditto - - * docs/examples/glib_master.py: handle new makeApp() interface - * docs/examples/twisted_master.py: ditto - - * buildbot/pbutil.py (NewCredPerspective): add a helper class to - base newcred Perspectives on. This should go away once Twisted - itself provides something sensible. - - -2003-09-11 Christopher Armstrong <radix@twistedmatrix.com> - - * contrib/svn_buildbot.py: A program that you can call from your - SVNREPO/hooks/post-commit file that will notify a BuildBot master - when a change in an SVN repository has happened. See the top of - the file for some minimal usage info. - -2003-09-10 Christopher Armstrong <radix@twistedmatrix.com> - - * buildbot/slavecommand.py (ArglistCommand): Add new - ArglistCommand that takes an argument list rather than a string as - a parameter. Using a st.split() for argv is very bad. - - * buildbot/slavecommand.py (SVNFetch): Now has the ability to - update to a particular revision rather than always checking out - (still not very smart about it, there may be cases where the - checkout becomes inconsistent). - -2003-09-10 Christopher Armstrong <radix@twistedmatrix.com> - - * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary - SVN fetch support. It can checkout (not update!) a specified - revision from a specified repository to a specified directory. - - * buildbot/status/progress.py (Expectations.update): Fix an - obvious bug (apparently created by the change described in the - previous ChangeLog message) by moving a check to *after* the - variable it checks is defined. - - -2003-09-08 Brian Warner <warner@lothar.com> - - * buildbot/status/progress.py (Expectations.update): hack to catch - an exception TTimo sees: sometimes the update() method seems to - get called before the step has actually finished, so the .stopTime - is not set, so no totalTime() is available and we average None - with the previous value. Catch this and just don't update the - metrics, and emit a log message. - -2003-08-24 Brian Warner <warner@lothar.com> - - * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy' - parameter to set copydir='original' in CVS commands. - - * buildbot/process/step.py (CVS): accept 'copydir' parameter. - - * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter, - which tells the command to maintain a separate original-source CVS - workspace. For each build, this workspace will be updated, then - the tree copied into a new workdir. This reduces CVS bandwidth - (from a full checkout to a mere update) while doubling the local - disk usage (to keep two copies of the tree). - -2003-08-21 Brian Warner <warner@lothar.com> - - * buildbot/status/event.py (Logfile.addEntry): if the master web - server dies while we're serving a page, request.write raises - pb.DeadReferenceError . Catch this and treat it like a - notifyFinish event by dropping the request. - -2003-08-18 Brian Warner <warner@lothar.com> - - * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain - (instead of blowing up) if a force-build command is given without - a reason field - - * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered): - don't blow up if there aren't yet any Changes in the list - -2003-08-02 Brian Warner <warner@lothar.com> - - * buildbot/bot.py (updateApplication): don't set the .tap name, - since we shouldn't assume we own the whole .tap file - - * buildbot/bb_tap.py (updateApplication): clean up code, detect - 'mktap buildbot' (without a subcommand) better - -2003-07-29 Brian Warner <warner@lothar.com> - - * buildbot/status/words.py - (IrcStatusFactory.clientConnectionLost): when we lose the - connection to the IRC server, schedule a reconnection attempt. - - * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix, - use shutil.rmtree instead of forking off an "rm -rf" command. - rmtree may take a while and will block until it finishes, so we - use "rm -rf" if available. - - * docs/examples/twisted_master.py: turn off kqreactor, it hangs - freebsd buildslave badly - - * setup.py (version): bump to 0.3.4+ while between releases - -2003-07-28 Brian Warner <warner@lothar.com> - - * setup.py (version): Releasing buildbot-0.3.4 - -2003-07-28 Brian Warner <warner@lothar.com> - - * NEWS: update in preparation for release - - * buildbot/slavecommand.py (ShellCommand.doTimeout): use - process.signalProcess instead of os.kill, to improve w32 - portability - - * docs/examples/twisted_master.py (twisted_app): turn off - win32eventreactor: the tests hang the buildslave badly - - * buildbot/process/base.py (Build.buildFinished): update ETA even on - failed builds, since usually the failures are consistent - - * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory): - add compileOpts/compileOpts2 to reactors build - - * docs/examples/twisted_master.py (twisted_app): add "-c mingw32" - (twisted_app): use both default and win32eventreactor on w32 build. - Use both default and kqreactor on freebsd build. - - * buildbot/process/process_twisted.py (FullTwistedBuildFactory): - add compileOpts2, which is put after the build_ext argument. w32 - needs "-c mingw32" here. - - * buildbot/status/html.py (StatusResourceBuilder.getChild): don't - touch .acqpath, it goes away in recent Twisted releases - - * docs/examples/twisted_master.py (twisted_app): use "python" for - the w32 buildslave, not "python2.2" - - * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if - the directory exists.. should hush an exception under w32 - - * buildbot/slavecommand.py (ShellCommandPP.processEnded): use - ProcessTerminated -provided values for signal and exitCode rather - than parsing the unix status code directly. This should remove one - more roadblock for a w32-hosted buildslave. - - * test/test_mailparse.py: add test cases for Syncmail parser - - * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a - temporary compatibility import. Note! Start importing - FCMaildirSource from changes.mail instead of changes.freshcvsmail - - * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser - -2003-07-27 Brian Warner <warner@lothar.com> - - * NEWS: started adding new features - - * buildbot/changes/mail.py: start work on Syncmail parser, move - mail sources into their own file - - * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class - as implementing IChangeSource - * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto - - * buildbot/interfaces.py: define the IChangeSource interface - -2003-07-26 Brian Warner <warner@lothar.com> - - * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner) - -2003-06-25 Brian Warner <warner@lothar.com> - - * buildbot/status/words.py (IrcStatusBot.emit_last): round off - seconds display - -2003-06-17 Brian Warner <warner@lothar.com> - - * buildbot/status/words.py: clean up method usage to avoid error - in silly IRC command - (IrcStatusBot.emit_status): round off seconds display - - * buildbot/process/base.py (Build): delete the timer when saving - to the .tap file, and restore it (if it should still be running) - upon restore. This should fix the "next build in -34 seconds" - messages that result when the master is restarted while builds are - sitting in the .waiting slot. If the time for the build has - already passed, start it very soon (in 1 second). - - * buildbot/status/words.py: more silly commands - - * README (REQUIREMENTS): add URLs to all required software - - * buildbot/status/words.py ('last'): mention results of, and time - since last build - -2003-05-28 Brian Warner <warner@lothar.com> - - * buildbot/status/words.py: add 'last' command - (IrcStatusBot.emit_status): add current-small text to 'status' output - - * docs/examples/twisted_master.py (twisted_app): turn on IRC bot - (twisted_app): remove spaces from OS-X builder name - - * buildbot/master.py (makeApp): add knob to turn on IRC bot - * buildbot/status/words.py: IRC bot should actually be useful now - -2003-05-23 Brian Warner <warner@lothar.com> - - * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get - "slave information" from $(slavedir)/info/* . These files are - maintained by the slave administrator, and describe the - machine/environment that is hosting the slave. Information from - them is put into the "Builder" HTML page. Still need to establish - a set of well-known filenames and meanings for this data: at the - moment, *all* info/* files are sent to the master, but only - 'admin' and 'host' are used on that end. - * buildbot/status/html.py (StatusResourceBuilder.body): ditto - * buildbot/process/base.py (Builder.setRemoteInfo): ditto - * buildbot/master.py (BotPerspective.got_info): ditto - -2003-05-22 Brian Warner <warner@lothar.com> - - * setup.py (version): bump version to 0.3.3+ while between releases - -2003-05-21 Brian Warner <warner@lothar.com> - - * setup.py: Releasing buildbot-0.3.3 - -2003-05-21 Brian Warner <warner@lothar.com> - - * NEWS: 0.3.3 news items - - * README: describe --keepalive and life behind a NAT box - - * buildbot/bot.py (Bot.connected): implement application-level - keepalives to deal with NAT timeouts, turn them on with - --keepalive option or when SO_KEEPALIVE doesn't work. - - * buildbot/master.py (BotPerspective): accept keepalives silently - - * buildbot/process/base.py (Build.buildException): CopiedFailures - don't carry as much information as local ones, so don't try to - create a big HTMLized version of them. - - * buildbot/process/step.py (InternalShellCommand.stepFailed): close - log file when step fails due to an exception, such as when the slave - becomes unreachable - - * buildbot/process/step_twisted.py (RunUnitTests): use trial's new - --testmodule argument instead of grepping for test-case-name tags - ourselves. Remove FindUnitTests code. - * buildbot/slavecommand.py, buildbot/bot.py: remove old code - - * MANIFEST.in: Add docs/examples, files under test/ . Oops! - -2003-05-16 Brian Warner <warner@lothar.com> - - * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv' - argument to allow things like CFLAGS=-O0 to be passed without relying - upon /bin/sh processing on the slave. - - * buildbot/process/step.py (InternalShellCommand.start): send - 'env' dict to slave - * buildbot/slavecommand.py (ShellCommand.start): create argv with - 'split' instead of letting /bin/sh do it. This should also remove - the need for /bin/sh on the buildslave, making it more likely to - work with win32. - - * buildbot/status/html.py: html-escape text in blamelist. - Add "force build" button to the Builder page. - - * buildbot/process/step_twisted.py (countFailedTests): look at - last 1000 characters for status line, as import errors can put it - before the -200 point. - -2003-05-15 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.py: use clobber=0 for remote builds - - * buildbot/process/process_twisted.py (FullTwistedBuildFactory): - make 'clobber' a parameter, so it is possible to have builds which - do full tests but do a cvs update instead of hammering the CVS - server with a full checkout each build - - * buildbot/process/step.py (InternalShellCommand): bump default - timeout to 20 minutes - - * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask - the master to trigger a build. Run it via manhole. - - * buildbot/master.py (BotPerspective.perspective_forceBuild): - allow slaves to trigger any build that they host, to make life - easier for slave admins who are testing out new build processes - - * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory): - don't flunk cReactor or qtreactor on failure, since they fail alot - these days. Do warnOnFailure instead. - - * buildbot/process/base.py: change Builder.buildable from a list - into a single slot. When we don't have a slave, new builds (once - they make it past the timeout) are now merged into an existing - buildable one instead of being queued. With this change, a slave - which has been away for a while doesn't get pounded with all the - builds it missed, but instead just does a single build. - -2003-05-07 Brian Warner <warner@lothar.com> - - * setup.py (version): bump version to 0.3.2+ while between releases - -2003-05-07 Brian Warner <warner@lothar.com> - - * setup.py: Releasing buildbot-0.3.2 - -2003-05-07 Brian Warner <warner@lothar.com> - - * setup.py: fix major packaging error: include subdirectories! - - * NEWS: add changes since last release - - * README (REQUIREMENTS): update twisted/python dependencies - - * buildbot/status/builder.py (Builder.startBuild): change - BuildProcess API: now they should call startBuild/finishBuild - instead of pushing firstEvent / setLastBuildStatus. Moving towards - keeping a list of builds in the statusbag, to support other kinds of - status delivery. - (Builder.addClient): send current-activity-small to new clients - * buildbot/process/base.py (Build.startBuild, .buildFinished): use - new API - - * buildbot/status/client.py: drop RemoteReferences at shutdown - - * buildbot/status/event.py (Event.stoppedObserving): oops, add it - - * buildbot/status/progress.py (BuildProgress.remote_subscribe): - more debug messages for remote status client - - * buildbot/process/step.py (InternalBuildStep.stepComplete) - (.stepFailed): only fire the Deferred once, even if both - stepComplete and stepFailed are called. I think this can happen if - an exception occurs at a weird time. - - * buildbot/status/words.py: work-in-progress: IRC status delivery - -2003-05-05 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.py (twisted_app): hush internal - python2.3 distutils deprecation warnings - * buildbot/process/process_twisted.py (FullTwistedBuildFactory): - add compileOpts= argument which inserts extra args before the - "setup.py build_ext" command. This can be used to give -Wignore - warnings, to hush some internal python-2.3 deprecation messages. - - * buildbot/process/step_twisted.py (RunUnitTests): parameterize - the ['twisted.test'] default test case to make it easier to change - in subclasses - - * buildbot/clients/base.py: switch to pb.Cacheable-style Events - * buildbot/clients/gtkPanes.py: ditto - - * buildbot/process/step_twisted.py (RunUnitTests): use randomly= - arg to collapse RunUnitTestsRandomly into RunUnitTests - * buildbot/process/process_twisted.py (FullTwistedBuildFactory): - use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly - - * buildbot/status/html.py (StatusResource): shuffle Resources - around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/' - would serve the waterfall display, but the internal links were - only valid on the trailing-slash version. The correct behavior is - for the non-slashed one to serve a Redirect to the slashed one. - This only shows up when the buildbot page is hanging off another - server, like a Twisted-Web distributed server. - - * buildbot/status/event.py (Event, RemoteEvent): make Events - pb.Cacheable, with RemoteEvent as the cached version. This removes - a lot of explicit send-an-update code. - * buildbot/status/builder.py (Builder): remove send-update code - * buildbot/status/client.py (ClientBuilder): remove send-update - code, and log errors that occur during callRemote (mostly to catch - InsecureJelly exceptions) - - * buildbot/process/process_twisted.py (QuickTwistedBuildFactory): - run Lore with the same python used in the rest of the build - - * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved - - * buildbot/process/step_twisted.py (HLint): accept 'python' - argument. Catch rc!=0 and mark the step as failed. This marks the - build orange ("has warnings"). - (RunUnitTestsJelly): move out to step_twisted2.py - - * buildbot/util.py (ignoreStaleRefs): add utility function - - * buildbot/master.py (DebugPerspective.perspective_setCurrentState): - don't fake ETA object, it's too hard to get right - -2003-05-02 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder - -2003-05-01 Brian Warner <warner@lothar.com> - - * buildbot/status/html.py (StatusResource.body): oops, I was - missing a <tr>, causing the waterfall page to be misrendered in - everything except Galeon. - -2003-04-29 Brian Warner <warner@lothar.com> - - * docs/examples/twisted_master.py: make debuild use python-2.2 - explicitly, now that Twisted stopped supporting 2.1 - - * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops, - handle tuple results too. I keep forgetting this, which suggests - it needs to be rethought. - - * setup.py (setup): bump version to 0.3.1+ while between releases - -2003-04-29 Brian Warner <warner@lothar.com> - - * setup.py: Releasing buildbot-0.3.1 - -2003-04-29 Brian Warner <warner@lothar.com> - - * README (SUPPORT): add plea to send questions to the mailing list - - * NEWS, MANIFEST.in: add description of recent changes - - * docs/examples/twisted_master.py: add the code used to create the - Twisted buildmaster, with passwords and such removed out to a - separate file. - - * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split - out cvstoys-using bits from generic changes.py, to allow non-cvstoys - buildmasters to not require CVSToys be installed. - * README, docs/examples/glib_master: update to match the change - - * buildbot/clients/base.py, buildbot/bot.py, - buildbot/changes/changes.py, buildbot/pbutil.py: copy - ReconnectingPB from CVSToys distribution to remove CVSToys - dependency for build slaves and status clients. Buildmasters which - use FreshCVSSources still require cvstoys be installed, of course. - -2003-04-25 Brian Warner <warner@lothar.com> - - * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add - runTestsRandomly arg to turn on trial -z - - * buildbot/process/step_twisted.py (TwistedJellyTestResults): - experimental code to use trial's machine-parseable output to get - more detailed test results. Still has some major issues. - (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests - in random sequence - - * buildbot/status/builder.py (Builder.setCurrentBuild): - anticipating moving build history into statusbag, not used yet - - * buildbot/status/tests.py: code to centralize test results, - doesn't work quite yet - - * buildbot/status/event.py (Event): use hasattr("setName") instead - of isinstance for now.. need better long-term solution - - * buildbot/status/html.py: Remove old imports - -2003-04-24 Brian Warner <warner@lothar.com> - - * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant): - ignore changes under doc/fun/ and sandbox/ - - * buildbot/process/step_twisted.py: update pushEvent and friends. - - * buildbot/status/html.py (Box.td): replace event.buildername with - event.parent.getSwappableName(). Needs more thought. - - * buildbot/status/builder.py (Builder): Replace pushEvent and - getLastEvent with {set|update|addFileTo|finish}CurrentActivity. - Tell events they are being pruned with event.delete(). - - * buildbot/process/base.py (Build): Remove Builder status-handling - methods. s/pushEvent/setCurrentActivity/. - - * buildbot/process/step.py (BuildStep): clean up status delivery. - Gouse builder.statusbag methods instead of intermediate builder - methods. s/updateLastEvent/updateCurrentActivity/. - s/finalizeLastEvent/finishCurrentActivity/. Use - addFileToCurrentActivity for summaryFunction. - - * buildbot/status/event.py (Logfile): put data in a Swappable when - .finish is called. - (Event): add more setter methods. Remove .buildername, use .parent - and getSwappableName instead (needs more thought). - - * buildbot/util.py (Swappable): - * test/test_swap.py: don't bother setting filename at __init__ - time, do it later. Change setFilename args to take parent first, - since it provides the most significant part of the filename. - -2003-04-23 Brian Warner <warner@lothar.com> - - * buildbot/status/event.py (Logfile.addEntry): append to previous - entry, if possible - - * buildbot/process/step.py (BuildStep.finalizeLastEvent): - anticipating Swappable - (InternalShellCommand.remoteUpdate): split out various log-adding - methods so subclasses can snarf stdout separately - - * buildbot/process/base.py (Builder.finalizeLastEvent): more code - in anticipation of Swappable build logs - (Builder.testsFinished): anticipating TestResults, still disabled - - * buildbot/status/builder.py (Builder.pruneEvents): only keep the - last 100 events - - * buildbot/status/event.py (Logfile): add (disabled) support for - Swappable, not ready for use yet - - * buildbot/util.py (Swappable): object which is swapped out to - disk after some period of no use. - * test/test_swap.py: test buildbot.utils.Swappable - -2003-04-14 Brian Warner <warner@lothar.com> - - * buildbot/process/base.py (Builder.doPeriodicBuild): add simple - periodic-build timer. Set the .periodicBuildTime on a builder - instance to some number of seconds to activate it. - - * buildbot/master.py (BotMaster.forceBuild): change forceBuild API - - * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in - a way that survives result tuples - -2003-04-12 Brian Warner <warner@lothar.com> - - * buildbot/process/step.py (ShellCommand.finishStatusSummary): - return a dict instead of a tuple: allow summarizers to provide - multiple summaries if they want - * buildbot/process/step_twisted.py (trialTextSummarizer): return dict - (debuildSummarizer): summarize lintian warnings/errors - -2003-04-10 Brian Warner <warner@lothar.com> - - * README (REQUIREMENTS): slave requires twisted-1.0.4a2 - -2003-04-09 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create - empty summaries: happens when the tests fail so hard they don't emit - a parseable summary line. - - * buildbot/process/step.py (ShellCommand.finishStatusSummary): - Allow summaryFunction to return None to indicate no summary should - be added. - - * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid - writing to stale HTTP requests: notice when they disconnect and - remove the request from the list. Also add CacheToFile from - moshez, will be used later. - -2003-04-08 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings - should be an int, not a list of strings - - * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect - if we weren't actually connected - - * buildbot/process/step_twisted.py (trialTextSummarizer): function - to show the tail end of the trial text output - - * buildbot/process/step.py (ShellCommand.finishStatusSummary): add - hook to summarize the results of a ShellCommand - -2003-04-07 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (RunUnitTests): consolidate all - twisted test suite code into a single class. - * buildbot/process/process_twisted.py: same - -2003-04-04 Brian Warner <warner@lothar.com> - - * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed - - * README (SLAVE): document use of mktap to create slave .tap file - (REQUIREMENTS): describe dependencies - - * buildbot/bb_tap.py, buildbot/plugins.tml: - * buildbot/bot.py (updateApplication): Add mktap support for creating - buildslave .tap files - -2003-03-28 Brian Warner <warner@lothar.com> - - * buildbot/process/step.py (InternalShellCommand.finished): handle - new tuple result values (fix embarrasing bug that appeared during - PyCon demo) - -2003-03-27 Brian Warner <warner@lothar.com> - - * docs/examples/glib_master.py, README: add sample buildmaster.tap - -making program - -2003-03-25 Brian Warner <warner@lothar.com> - - * buildbot/process/step.py (CVS, ShellCommand): add reason for failure - to overall build status - * buildbot/clients/base.py (Builder): improve event printing - * buildbot/process/base.py (BasicBuildFactory): use specific steps - instead of generic ShellCommand - (Build): Add .stopBuild, use it when slave is detached - - * buildbot/process/step.py (Configure,Test): give the steps their - own names and status strings - - * buildbot/status/html.py (StatusResource): add "show" argument, - lets you limit the set of Builders being displayed. - -2003-03-20 Brian Warner <warner@lothar.com> - - * buildbot/process/basic.py: removed - -2003-03-19 Brian Warner <warner@lothar.com> - - * buildbot/process/process_twisted.py (FullTwistedBuildFactory): - turn off process-docs by default - - * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up - when displaying build information without anything in allBuilds[] - - * buildbot/bot.py (makeApp): really take password from sys.argv - -2003-03-18 Brian Warner <warner@lothar.com> - - * buildbot/bot.py (buildApp): take password from sys.argv - - * README: replace with more useful text - - * setup.py: add a real one - * MANIFEST.in, .cvsignore: more distutils packaging stuff - - * docs/PyCon-2003/: added sources for PyCon paper. - - * buildbot/process/base.py, step.py: revamp. BuildProcess is gone, - now Build objects control the process and Builder only handles - slave stuff and distribution of changes/status. A new BuildFactory - class creates Build objects on demand. - - Created ConfigurableBuild which takes a list of steps to run. This - makes it a lot easier to set up a new kind of build and moves us - closer to being able to configure a build from a web page. - - * buildbot/process/step_twisted.py, process_twisted.py: move to - new model. A lot of code went away. - - * buildbot/status/progress.py (BuildProgress.newProgress): Don't - send lots of empty progress messages to the client. - - * buildbot/master.py (makeApp): enforce builder-name uniqueness - -2003-02-20 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py (BuildDebs): count lintian hits - - * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The - Twisted bug that prevented non-pty processes from working just got - fixed, and the bug that leaks ptys is still being investigated. - - * buildbot/process/step.py (CVS): send timeout arg to slave - - * buildbot/clients/gtkPanes.py: add connection-status row, handle - builders coming and going - * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB - from CVSToys, handle lost-buildmaster - - * buildbot/status/client.py (StatusClientService.removeBuilder): - Clean up status client protocol: send builders (with references) - as they are created, rather than sending a list and requiring the - client to figure out which ones are new. - * buildbot/master.py (BotMaster.forceBuild): Log debugclient - attempts to force a build on an unknown builder - -2003-02-19 Brian Warner <warner@lothar.com> - - * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands - * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until - Twisted stops leaking them. - * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the - builder goes to an idle state. - - * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until - I figure out why CVS commands hang without them, and/or I fix the - hung-command timeout - -2003-02-16 Brian Warner <warner@lothar.com> - - * buildbot/process/step_twisted.py: bin/hlint went away, replace - with 'bin/lore --output lint'. Use 'bin/trial -o' to remove - ansi-color markup. Remove GenerateLore step. Count hlint warnings in - GenerateDocs now that they are prefixed with WARNING:. - - * buildbot/status/html.py (StatusResource.body): Fix Builder link, - use manual href target instead of request.childLink - - * buildbot/clients/gtkPanes.py: Fix progress countdown: update the - display every second, but update the ETA every 5 seconds (or - whenever) as remote_progress messages arrive. - - -2003-02-12 Brian Warner <warner@lothar.com> - - * *: import current sources from home CVS repository - - -# Local Variables: -# add-log-time-format: add-log-iso8601-time-string -# End: |