summaryrefslogtreecommitdiff
path: root/buildbot/buildbot-source/ChangeLog
diff options
context:
space:
mode:
Diffstat (limited to 'buildbot/buildbot-source/ChangeLog')
-rw-r--r--buildbot/buildbot-source/ChangeLog6129
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: