1 2007-09-30 Brian Warner <warner@lothar.com>
3 * buildbot/status/web/base.py (OneLineMixin.make_line): add the
4 build's text to the end of the line, without a CSS class so it
7 * buildbot/interfaces.py (IStatus.generateFinishedBuilds): add a
8 'max_search=' argument, to limit the number of builds that are
9 examined while trying to find ones that match the other criteria.
10 This helps to limit the work we do, since otherwise we might have
11 to trawl through all history.
12 (IBuilderStatus.generateFinishedBuilds): same
13 * buildbot/status/builder.py (Status.generateFinishedBuilds): same
14 (BuilderStatus.generateFinishedBuilds): same
16 * buildbot/status/web/base.py (OneLineMixin.make_line): stringify
17 our got_revision before checking its length: SVN (at least) still
18 reports numeric values for this.
19 * buildbot/status/web/build.py (StatusResourceBuild.body): same
20 * buildbot/status/web/xmlrpc.py
21 (XMLRPCServer.xmlrpc_getAllBuildsInInterval): same, also stop
22 serving a completely fake revision
24 * buildbot/scripts/runner.py (Maker.check_master_cfg): prepend
25 basedir to sys.path, to mimic what a real buildmaster would have
26 access to, since it is common for master.cfg to import helper
27 classes from .py files in the buildmaster directory, and we want
28 config-file checking to accomodate this.
30 * buildbot/status/web/base.py (map_branches): when referring to
31 branches through WebStatus (i.e. by appending ?branch=FOO query
32 arguments to the URL), make "trunk" mean trunk, by mapping it to
33 None before passing it to generateFinishedBuilds() and the like.
34 * buildbot/status/web/baseweb.py (OneLinePerBuild.body): same
35 (OneBoxPerBuilder.body): same, also improve display of branches in
37 * buildbot/status/web/waterfall.py (BuildTopBox.getBox): same
38 (WaterfallStatusResource.buildGrid): same. Note that this filters
39 Changes as well as Builds.
40 * docs/buildbot.texinfo (Buildbot Web Resources): remove the
41 caveat about trunk branches, now that it's fixed
43 * buildbot/status/web/base.py (OneLineMixin): refactor, move this
44 from builder.py, use it on the Builder page too
46 * buildbot/status/web/builder.py (StatusResourceBuilder): same
47 * buildbot/status/web/baseweb.py (OneLinePerBuild): display branch
48 names, add some CSS classes
49 * buildbot/status/web/classic.css (td.box): new class, for
52 * docs/buildbot.texinfo (WebStatus): update docs
54 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): remove
55 the trailing "M" indicator that tells us this is a modified file.
56 This should help with mode="update" builds that modify files
57 in-place. Thanks to "Oz" (chris at santacruzgames.com) for the
60 * buildbot/scripts/runner.py (upgradeMaster): improvements: write
61 new copies of files (to .new) when those files already exist,
62 check the master.cfg file for errors (and give DeprecationWarnings
63 a chance to be displayed).
64 * buildbot/test/test_runner.py: add more tests
65 * docs/buildbot.texinfo (Upgrading an Existing Buildmaster): docs
67 2007-09-29 Brian Warner <warner@lothar.com>
69 * buildbot/steps/source.py (Mercurial.computeSourceRevision): take
70 the revision id from the last change in our list, since that's the
71 best we can do without knowing the full ancestry graph. Closes #103.
73 * buildbot/scripts/sample.cfg: use buildstep instances in
74 f.addStep, to demonstrate the (correct) modern usage.
75 * docs/examples/hello.cfg: bring this up to date. Closes #79.
76 * docs/examples/twisted_master.cfg: add a big warning about how
78 * docs/examples/glib_master.cfg: delete this one entirely, it is
79 ancient and not a very useful example anyways
81 * buildbot/status/web/base.py (HtmlResource.render): keep track of
82 HTTPChannels, so we can shut them down at reconfig time (when the
83 WebStatus goes away). Closes #102.
84 * buildbot/status/web/baseweb.py (WebStatus.__init__): same
85 (WebStatus.registerChannel): same
86 (WebStatus.stopService): do .loseConnection() here
88 * buildbot/test/test_webparts.py (Webparts.testPages): reload the
89 WebStatus, make sure all pages are still retrievable. I thought
90 this would exercise a bug, but it turns out that it was firefox
91 caching connections (and continuing to talk to the old WebStatus
92 even though I'd loaded a new one).
93 * buildbot/status/web/baseweb.py (WebStatus): add some comments
94 (WebStatus.__repr__): include id() in the repr
96 * buildbot/status/tinderbox.py (TinderboxMailNotifier): allow
97 this to specify an errorparser. From Ted Mielczarek and the
98 mozilla crew. Closes #94.
100 * buildbot/changes/bonsaipoller.py (BonsaiParser): "Make
101 bonsaipoller ignore funkyness in xml output for empy log
102 messages", from Axel Hecht. Closes #90.
103 * buildbot/test/test_bonsaipoller.py
104 (TestBonsaiPoller.testMergeEmptyLogMsg): same
106 * buildbot/status/tinderbox.py (TinderboxMailNotifier.buildStarted):
107 respect 'builders' arg, from Ben Hearsum. Closes #89.
109 * buildbot/scripts/runner.py (stop): increase the timeout from 5
110 seconds to 10, to give heavily loaded machines a better chance to
111 finish shutting down. Addresses (partially) #68.
112 * buildbot/scripts/logwatcher.py (LogWatcher.TIMEOUT_DELAY): same,
114 * buildbot/scripts/reconfig.py (Reconfigurator.run): same
115 * buildbot/scripts/startup.py (Follower._failure): update message
117 * buildbot/changes/bonsaipoller.py: apply changes from the Mozilla
118 team, to fix some bugs and avoid the use of blocking urlopen().
120 * buildbot/test/test_bonsaipoller.py: same
122 2007-09-28 Brian Warner <warner@lothar.com>
124 * buildbot/buildslave.py (BuildSlave): add notify_on_missing=
125 argument, to send email about buildslaves which are disconnected
126 for more than an hour. Closes #64.
127 * buildbot/test/test_slaves.py (BuildSlave.test_mail_on_missing):
129 * docs/buildbot.texinfo (When Buildslaves Go Missing): document it
130 (MailNotifier): add docs for this too
133 * buildbot/status/web/baseweb.py (OneBoxPerBuilder): make this page
134 respect branch= queryargs, by restricting the builds displayed to
135 those matching the given branch names
136 * buildbot/status/web/waterfall.py (BuildTopBox): same
138 * buildbot/test/test_web.py (WaterfallSteps.test_urls.FakeRequest):
139 fix a test failure by adding .prepath to this fake object
141 * buildbot/status/web/*: big set of changes to WebStatus, cleaning
142 up generation of relative URLs. With luck, this should play with
143 reverse proxies much better now.
144 * buildbot/test/test_webparts.py: new test for most of the subpages
145 * buildbot/test/test_web.py (base_config): add enough of a config
146 to exercise more Waterfall code
148 2007-09-27 Brian Warner <warner@lothar.com>
150 * buildbot/status/web/build.py (StatusResourceBuild.body): use a
151 relative URL to the buildbot welcome page, rather than
153 * buildbot/status/web/builder.py (StatusResourceBuilder.body): same
155 * buildbot/status/web/base.py (HtmlResource.title): change the
156 default title of all Buildbot-generated page to "Buildbot"
157 * buildbot/status/web/builder.py (StatusResourceBuilder.getTitle):
158 change the title to include the Builder name
159 * buildbot/status/web/build.py (StatusResourceBuild.getTitle):
160 same, and also show the build number
161 (StatusResourceBuild.rebuild): after using the 'Rebuild' button,
162 redirect the browser to the Builder page
164 2007-09-26 Brian Warner <warner@lothar.com>
166 * buildbot/status/web/baseweb.py (OneBoxPerBuilder.body): fix URL
167 problem with the build links
169 2007-09-25 Brian Warner <warner@lothar.com>
171 * buildbot/status/web/base.py (HtmlResource.render): fix addSlash
172 to emit relative URLs instead of using URLPath,
174 * docs/buildbot.texinfo (WebStatus): provide an example
176 * buildbot/status/web/baseweb.py (OneBoxPerBuilder): new status
177 page, shows a simple table with one row per Builder. Still pretty
178 ugly, but functional.
179 * buildbot/status/web/index.html: reference it
181 * buildbot/status/web/waterfall.py (Spacer): make this *not*
182 inherit from builder.Event, so that show_events=false doesn't hide
183 spacers, since that would make the waterfall weirdly compressed.
185 * buildbot/status/web/waterfall.py (HELP): put the View button in
186 its own section, so it doesn't get visually confused with the
188 (WaterfallStatusResource.body): make the '[help]' links more
189 visually distinct from each other, and add a link to the Welcome
191 * buildbot/status/web/slaves.py (BuildSlavesResource): handle
192 unused buildslaves without exploding
194 * buildbot/status/web/waterfall.py
195 (WaterfallStatusResource.body.with_args): don't use req.URLPath,
196 it gives us absolute paths that break proxies
197 * buildbot/status/web/base.py (HtmlResource.path_to_root): fix
198 this, it was giving bad results when the Waterfall is behind a
201 * buildbot/scripts/runner.py (upgradeMaster): first phase of the
202 new 'upgrade-master' command, which will bring an old buildmaster
203 directory up-to-date. Right now the only thing it does is populate
204 public_html/ if it wasn't already there. Still to do: check the
205 other files, add documentation.
206 * buildbot/test/test_runner.py (Create.testUpgradeMaster): test it
207 (Create.failUnlessSameFiles): use sets.Set() for 2.3 compatibility
209 2007-08-13 Brian Warner <warner@lothar.com>
211 * buildbot/changes/changes.py (Change.get_HTML_box): add a tooltip
212 that contains the checkin comments when you hover over the entry
213 in the 'changes' column of the waterfall. Thanks to Frederic Leroy
216 * buildbot/status/web/waterfall.py (WaterfallStatusResource): improve
219 * buildbot/status/web/about.py (AboutBuildbot): add an 'about'
220 page with versions of python, buildbot, and twisted
221 * buildbot/status/web/baseweb.py (WebStatus.setupUsualPages): same
222 * buildbot/status/web/index.html: add links to most pages
223 * docs/buildbot.texinfo (Buildbot Web Resources): update docs
225 * buildbot/status/web/robots.txt: put a robots.txt in new installs
226 which discourages robot access to all large dynamically-generated
227 pages. The intention is that the index page and the 'about' page
228 are the only ones which should be crawlable.
229 * buildbot/scripts/runner.py (Maker.public_html): same
231 * setup.py: ship index.html and robots.txt in source distributions
233 * buildbot/status/web/waterfall.py: add 'refresh' query arg, to
234 activate automatic reloading of the page (using a meta Refresh:
236 (WaterfallHelp): new page to explain all the nifty query arguments
237 you can use on the Waterfall, along with forms to set them for
238 you. From this page, you can add filters for builder=, branch=,
239 show_events=, as well as turning on reload=.
240 (WaterfallStatusResource.buildGrid): new query args: last_time=,
241 first_time=, show_time=, num_events= . The old show= is still
242 accepted, but the new builder= is preferred. We ignore empty
243 branch= arguments, to make the WaterfallHelp form easier to
245 (WaterfallStatusResource.head): new method to add text to the
247 * buildbot/status/web/base.py (HtmlResource.content): use head()
248 * buildbot/status/web/baseweb.py (OneLinePerBuild.body): ignore
249 empty branch= arguments
250 (OneLinePerBuildOneBuilder.body): same
252 2007-08-12 Brian Warner <warner@lothar.com>
254 * buildbot/status/web/waterfall.py (WaterfallStatusResource): add
255 new query args: 'last_time' is a timestamp of the top-most event
256 on the display, 'first_time' is a timestamp for the bottom-most
257 event. 'show_time' is the difference between them, and overrides
258 'first_time'. 'num_events' puts an upper limit on the number of
259 timestamps that will be displayed on the left hand edge.
260 (WaterfallStatusResource.body): add a 'next page' link to the
261 bottom, which shows the events that come just after those shown on
262 the current page. This is a first step towards #67, but we need
263 some more controls before we can close that one.
265 * buildbot/buildslave.py (BuildSlave): these are now MultiService
266 instances too, and live as children of the BotMaster. The main
267 advantage of this approach is that BuildSlaves can know when they
268 are being removed (so they can shut off the upcoming
269 when-do-we-email-an-admin-because-we-lost-our-slave timer).
270 * buildbot/interfaces.py (IBuildSlave): marker interface so we can
271 identify which service children are BuildSlaves
272 * buildbot/master.py (BuildMaster.loadConfig_Slaves): handle the
273 Checker updates here, but delegate the rest to..
274 (BotMaster.loadConfig_Slaves): .. here, which looks at the
275 BotMaster's service children to identify the old slaves. I think
276 the previous approach of using master.slaves was broken in the
277 face of config updates that modified BuildSlave instances but did
278 not completely replace them.
279 * docs/buildbot.texinfo (Developer's Appendix): note the change to
280 the Service hierarchy
282 * buildbot/status/web/slaves.py (BuildSlavesResource): new status
283 page (at URL /buildslaves/) to view status of all buildslaves at
284 once, including how long it's been since we last heard from them,
285 and which Builders use them.
287 * buildbot/status/web/baseweb.py: fix title of one-line-per-build
290 * buildbot/interfaces.py (IStatus.getSlaveNames): new method to
293 * buildbot/buildslave.py (BuildSlave.messageReceivedFromSlave):
294 use the BuildSlave to keep track of the last time we've heard from
295 the buildslave. This is updated upon receipt of any message from
296 any SlaveBuilder (which generally means when RemoteCommands are
297 giving us status updates, as BuildSteps run). In the future this
298 will include slave pings too.
299 * buildbot/process/base.py
300 (Build.setupBuild): give each BuildStep a reference to the BuildSlave
301 * buildbot/process/buildstep.py:
302 (BuildStep.setBuildSlave): accept that reference
303 (BuildStep.runCommand): pass the reference on to the RemoteCommand
304 (RemoteCommand.remote_update): update the timestamp
305 (RemoteCommand.remote_complete): same
306 * buildbot/test/runutils.py (StepTester.makeStep): match the change
307 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
308 * buildbot/interfaces.py (ISlaveStatus.lastMessageReceived): new
309 interface to retrieve this timestamp
310 * buildbot/status/builder.py (SlaveStatus): track a copy of the
314 * buildbot/status/web/baseweb.py (OneLineMixin.make_line): tighten
316 (OneLinePerBuild.body): use a <ul> instead of <div>s
317 (OneLinePerBuildOneBuilder.body): same
319 * contrib/darcs_buildbot.py (makeChange): handle moved files too,
320 by adding the file's new name to the list of changed files. This
321 ought to be sufficient for things like isFileImportant and trial
322 tests that only exercise tests for files that have been modified.
325 * buildbot/status/web/xmlrpc.py (XMLRPCServer): add preliminary
326 XMLRPC server to the WebStatus page. This only has two methods
327 right now (getAllBuildsInInterval and getBuild), but we'll be
328 adding more in the future. This server is extracted from the
331 * buildbot/status/web/baseweb.py (OneLinePerBuild): refactor using
332 generateFinishedBuilds, and improve the data displayed.
333 * buildbot/status/web/build.py (StatusResourceBuild): rearrange
334 the per-Build page, add some information like ETA and got_revision
335 * buildbot/status/web/builder.py (StatusResourceBuilder): same,
336 adding a list of recently completed builds
337 * buildbot/status/web/base.py (css_classes): factor this out
339 * buildbot/interfaces.py (IStatus.generateFinishedBuilds): define
340 new method, to make status display classes easier to write,
341 especially the WebStatus 'one_line_per_build' page.
342 (IBuilderStatus.generateFinishedBuilds): same
343 * buildbot/status/builder.py (BuilderStatus.generateFinishedBuilds):
344 (Status.generateFinishedBuilds): implement it
346 * buildbot/process/factory.py (GNUAutoconf.__init__): allow
347 'source' to be a BuildStep instance, since BuildFactory accepts
349 (CPAN.__init__): same
350 (Distutils.__init__): same
351 (Trial.__init__): same
353 * buildbot/interfaces.py (IBuildStatus.getProperty): note that
354 this might raise KeyError
356 2007-08-07 Brian Warner <warner@lothar.com>
358 * buildbot/slave/commands.py (P4): use 'p4user' to construct the
359 'Owner:' field of the view, rather than 'p4logname', since
360 p4logname comes from the buildslave's environment and seems
361 unlikely to ever do the right thing. Thanks to Wade Brainerd for
362 the patch. Closes #40.
364 * buildbot/buildslave.py (BuildSlave.__init__): add max_builds=,
365 which imposes a per-slave limit on how many builds are allowed to
366 run simultaneously. This has a the same scope than the SlaveLock,
367 but is different because max_builds= gives the buildmaster the
368 freedom to assign the build to a different slave, whereas the
369 SlaveLock doesn't get tested until after the build is irrevocably
370 assigned to a slave. Therefore using max_builds= will improve
371 utilization in the presence of multiple buildslaves that are
372 attached to the same Builder. This completes the incorporation of
373 Dustin Mitchell's patches, and closes ticket #48. Thanks Dustin!
374 * buildbot/process/builder.py (SlaveBuilder.buildFinished): when
375 any Builder finishes, potentially trigger *all* Builders, since
376 max_builds= may have stalled someone else while waiting for the
378 * buildbot/scripts/sample.cfg: mention max_builds=
379 * buildbot/test/test_run.py (ConcurrencyLimit): test it
380 * docs/buildbot.texinfo (Buildslave Specifiers): document it
382 * buildbot/test/test_run.py (CanStartBuild._do_test2): tests which
383 inherit from RunMixin do not need to call master.stopService()
384 themselves, since RunMixin.tearDown does that. The double call
385 fails on Twisted-2.0.x, which didn't happen to protect against it.
386 * buildbot/test/test_slaves.py (BuildSlave.test_track_builders): same
388 * buildbot/buildslave.py (BuildSlave.addSlaveBuilder): third patch
389 from #48, this one to have the BuildSlave objects track
390 SlaveBuilders, so they'll be able to use that knowledge to
391 influence their canStartBuild() response.
392 * buildbot/process/builder.py (SlaveBuilder.attached): call it
393 (SlaveBuilder.detached): same
394 * buildbot/test/test_slaves.py (BuildSlave): test it
396 * buildbot/buildslave.py (BuildSlave.canStartBuild): incorporate
397 the second of Dustin's #48 patches, this one adding a method to
398 the BuildSlave that allows it to decide whether it is willing to
399 participate in a build or not.
400 (SlaveBuilder.isAvailable): use canStartBuild() to decide
402 * buildbot/test/test_run.py (CanStartBuild): test for it
404 * all: incorporate the first of four patches by Dustin Mitchell
405 from ticket #48, working towards improving control over slave
406 concurrency. The first patch is to use a long-lived BuildSlave
407 object per slave, on which other behavior can be added later. I've
408 modified his patch considerably.
409 * buildbot/buildslave.py (BuildSlave): move class out of
410 slave/__init__.py (where it would get loaded by the slave as well
411 as the master, making dependencies trickier), and merge it with
412 BotPerspective. Now these BuildSlave instances are created once in
413 the master.cfg file, and not destroyed until they are either
414 removed from the config file or changed so
415 much (name/password/class changes) that we cannot continue to use
416 the old one. This affects config files: they must use
417 'from buildbot.buildslave import BuildSlave' instead of using
418 'from buildbot.slave import BuildSlave'.
419 * buildbot/master.py: move BotPerspective out
420 (BuildMaster.loadConfig_Slaves): examine old and new slaves,
421 add or remove as necessary, update the rest using data from
423 * buildbot/slave/__init__.py: move BuildSlave out
424 * buildbot/test/test*.py: import BuildSlave from the new place
425 * buildbot/scripts/sample.cfg: update to match
426 * docs/buildbot.texinfo: update to match
427 * buildbot/process/builder.py: update comments to match
429 2007-08-02 Brian Warner <warner@lothar.com>
431 * buildbot/status/web/baseweb.py (OneLinePerBuild): improve
432 one-line-per-build pages a bit, add a header, refactor slightly
434 * buildbot/test/test_maildir.py (MaildirTest.testMaildir): cleanup
435 the TimeOutError timer, patch by Dustin Mitchell.
437 2007-08-01 Brian Warner <warner@lothar.com>
439 * buildbot/status/web/baseweb.py (OneLinePerBuild): make this
440 mostly work (branch= is still ignored, we need a useful header)
441 (OneLinePerBuildOneBuilder.body): this too
443 * buildbot/status/web/builder.py (StatusResourceBuilder.force):
444 bring this up-to-date w.r.t. recent refactorings, and fix
445 redirections to bounce the browser to the top page after hitting
446 the 'force' button. This needs to be improved, but at least it now
447 redirects to a valid page.
448 (StatusResourceBuilder.ping): same
449 (StatusResourceBuilder.getChild): same, although I think this code
450 might be dead anyways
452 * buildbot/status/web/waterfall.py (WaterfallStatusResource): add
453 a branch= query argument, to filter the display down to builds and
454 changes that involve the given branch. You can add multiple
455 branch= arguments to see multiple branches (using a logical OR).
456 Note that there is no way to include the default branch (i.e.
457 None, i.e. trunk) yet, there is still work to be done to allow for
458 simple+uniform names of branches (i.e. removing the VC-specific
459 details of how branches are implemented, so calling the branch
460 'beta4' even though the SVN checkout step requires
462 * buildbot/status/builder.py (BuilderStatus.eventGenerator): same
463 * buildbot/changes/changes.py (ChangeMaster.eventGenerator): same
464 * buildbot/interfaces.py (IEventSource.eventGenerator): same
465 * docs/buildbot.texinfo (Buildbot Web Resources): document it
467 * all: bring import statements up-to-date: don't import
468 __future__, assume cPickle and cStringIO are always available.
469 Also remove #!/usr/bin/python lines from non-scripts, my editor
470 has been a bit over-enthusiastic about stuffing them into new .py
473 * buildbot/status/web/index.html: put a link to the waterfall page
474 on the index, otherwise first-time users of WebStatus aren't going
475 to see anything very interesting.
477 * buildbot/interfaces.py (IEventSource): document this interface.
478 Thanks to Dustin Mitchell for the patch. Closes #60.
479 * buildbot/status/builder.py (BuilderStatus): same
480 * buildbot/changes/changes.py (ChangeMaster): same
482 * buildbot/status/web/waterfall.py (WaterfallStatusResource.buildGrid):
483 add a query arg of 'show_events=true' to display non-build events,
484 like slaves attaching/detaching and reconfig events, or
485 'show_events=false' to hide them. The default is 'true'.
486 * docs/buildbot.texinfo (Buildbot Web Resources): document it
488 * web-parts: merge in web-parts branch. Lots of changes. The new
489 functionality is to add buildbot.status.html.WebStatus, which is a
490 superset of the Waterfall that adds new status pages and serves
491 regular files from BASEDIR/public_html/ , which is now the preferred
492 place to put robots.txt, buildbot.css, and index.html .
493 * buildbot/scripts/runner.py: the 'create-master' command now
494 creates public_html/ too, and populates it with a couple of
496 * buildbot/status/web: split waterfall code into smaller pieces
498 2007-07-31 Brian Warner <warner@lothar.com>
500 * buildbot/scripts/startup.py (launch): import twistd.run in a
501 different way to hush pyflakes
502 * buildbot/process/builder.py: remove unused import
504 2007-07-30 Brian Warner <warner@lothar.com>
506 * buildbot/interfaces.py (ISourceStamp): cleanup patch by Dustin
507 Mitchell: pass SourceStamps around rather than branch/version/etc
508 tuples. Thanks Dustin! Closes #70.
509 * buildbot/sourcestamp.py (SourceStamp): insist that .changes is a
510 tuple rather than a list, to avoid surprising mutations
511 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
512 * buildbot/status/mail.py (MailNotifier.buildMessage): same
513 * buildbot/status/builder.py (BuildStatus.getSourceStamp): same
514 * buildbot/test/test_status.py (Subscription): same
515 * buildbot/test/test_control.py (Force): same
516 * buildbot/test/test_buildreq.py (Request.testMerge): same
518 2007-07-29 Brian Warner <warner@lothar.com>
520 * buildbot/scripts/sample.cfg: remove the spurious 'builders'
521 variable, since it wasn't used and is confusing in the presence of
522 c['builders'] (which *is* used). Thanks to Thomas Vander Stichele
525 * buildbot/status/web/waterfall.py (WaterfallStatusResource): update
526 the Buildbot home-page link to point at buildbot.net instead of
527 sourceforge, and add a current-version query parameter so we can
528 get some statistics on which versions are in use out there.
530 2007-07-28 Brian Warner <warner@lothar.com>
532 * buildbot/master.py (BuildMaster.loadConfig): replace c['sources']
533 with c['change_source'], leaving c['sources'] for backwards
534 compatibility (but deprecated), scheduled for removal in 0.8.0
535 * docs/buildbot.texinfo: same
536 * buildbot/test/test_config.py: verify that c['sources'] still works
537 * buildbot/test/test_*.py: replace c['sources'] with c['change_source']
538 * buildbot/scripts/sample.cfg: update to match
540 * buildbot/changes/mail.py (MaildirSource): parse with python's
541 stdlib 'email' module, which has been available since python2.2,
542 and drop use of the 'rfc822' module, which has been depreceated
544 * buildbot/test/test_maildir.py: same: use parse_file() not parse
546 * buildbot/test/test_maildir.py (MaildirTest.testMaildir): oops,
547 this needs to match the renaming in test/mail/msg*
549 * README (SETTING UP A BUILD MASTER): fix capitalization-typo.
552 * buildbot/test/test_mailparse.py: rename sample emails a bit
553 * buildbot/test/mail/msg*: same
555 * buildbot/changes/mail.py (SVNCommitEmailMaildirSource): add a
556 parser for the "commit-email.pl" script that is shipped with SVN,
557 written by Justin Mason. Thanks! Closes SF#1072845.
558 * buildbot/test/mail/svn-commit.*: sample messages
559 * buildbot/test/test_mailparse.py (TestSVNCommitEmail): test it
560 * docs/buildbot.texinfo (SVNCommitEmailMaildirSource): docs
562 2007-07-27 Brian Warner <warner@lothar.com>
564 * buildbot/changes/mail.py: refactor: move parsing into a method
565 named 'parse', each parser type gets a separate subclass. Remove
566 the old 'sep' argument (hardcode it to '/'), fix usage of prefix=
567 to be a simple leading-substring match. Add a warning to the logs
568 if prefix= does not end in a slash, since that's probably a
569 mistake. Fix both places where a prefix= mismatch would skip all
570 subsequent files in the same email, instead of just skipping the
571 one that didn't match.
572 * buildbot/test/test_mailparse.py: match changes
574 * docs/buildbot.texinfo (Getting Source Code Changes): refactor
575 docs on email-based ChangeSources
577 * docs/buildbot.texinfo (Getting Source Code Changes): move all
578 the changesource types up a level, removing the one-entry menu in
581 * buildbot/master.py (BuildMaster.loadConfig_Slaves): rename
582 c['bots'] to c['slaves'], and use buildbot.slave.BuildSlave
583 instances instead of tuples. Closes #63.
584 * buildbot/slave/__init__.py (BuildSlave): define marker class
585 * buildbot/scripts/sample.cfg: use c['slaves'] in sample config
586 * docs/buildbot.texinfo (Buildslave Specifiers): document c['slaves']
587 * buildbot/test/test_*.py: update tests to match
588 * buildbot/test/test_config.py (ConfigTest.testBots): verify that
589 the c['bots'] backwards-compatibility handler works
591 2007-07-26 Brian Warner <warner@lothar.com>
593 * buildbot/changes/hgbuildbot.py (hook): add an in-process
594 Mercurial change-sending hook, contributed by Frederic Leroy.
595 Thanks! Addresses #50.
596 * docs/buildbot.texinfo (MercurialHook): document it
598 * buildbot/changes/hgbuildbot.py: change the way imports are done,
599 to make it compatible with at least hg-0.9.1 and the current 0.9.4
601 2007-07-17 Brian Warner <warner@lothar.com>
603 * buildbot/process/buildstep.py (BuildStep.getLog): add a
604 convenience method to retrieve a log added with
605 addLog()/addCompleteLog()/etc or logfiles= . I should have added
608 2007-07-03 Brian Warner <warner@lothar.com>
610 * buildbot/slave/commands.py (ShellCommand._startCommand): when
611 logging the environment variables, put one variable on each line,
612 rather than having one really long line with all of them. This
613 should make them a bit more readable and not trigger the
614 horizontal scrollbar (when viewing it in a web browser) quite so
615 much. Thanks to Albert Hofkamp for the patch.
617 * buildbot/steps/shell.py (ShellCommand): allow workdir= to be a
618 WithProperties instance. Thanks to Axel Hecht for the patch.
620 * buildbot/test/test_properties.py (Interpolate.testWorkdir): test it
621 * docs/buildbot.texinfo (Build Properties): document it
622 * buildbot/slave/commands.py (ShellCommand._startCommand): create the
623 workdir if it didn't already exist.
625 * docs/buildbot.texinfo (Scheduler Types): correct the description
626 of Dependent schedulers. Thanks to Greg Ward for the patch.
628 * buildbot/steps/source.py (SVN.startVC): when applying a patch,
629 add "[patch]" to the step's display. Thanks to Dustin Mitchell for
630 the patch. Closes #49.
632 * buildbot/slave/commands.py (rmdirRecursive): chmod everything to
633 0700 before removing it, to deal with situations where a build will
634 leave files around without write permissions and the 'copy' or
635 'clobber' VC checkout modes need to blow away the tree first.
636 Thanks to Steve Milner for the suggestion and the patch (which I
637 mangled horribly). Closes #29.
638 * buildbot/test/test_slavecommand.py (Utilities.test_rmdirRecursive):
641 * buildbot/test/runutils.py (RunMixin.disappearSlave): oops, add
642 an allowReconnect= argument to let callers control whether they
643 want this don't-let-it-reconnect behavior, since some tests care.
644 Factor out the .continueTrying=False lines from those callers.
645 * buildbot/test/test_slaves.py: same
646 * buildbot/test/test_run.py: same
648 2007-07-02 Brian Warner <warner@lothar.com>
650 * buildbot/test/runutils.py (RunMixin.disappearSlave): once a
651 slave has been disappeared, don't let it reconnect. This was
652 causing an intermittent failure in test_slaves.py, when the slave
653 that was supposed to be gone managed to come back by the end of
654 the test and affect the count.
655 * buildbot/test/test_slaves.py (Slave.testFallback2): minor
657 * buildbot/process/builder.py (SlaveBuilder.__repr__): added some
658 diagnostic messages to track down this problem
659 (Builder.startBuild): same
661 * buildbot/process/builder.py (Builder.maybeStartBuild): choose
662 the slave randomly rather than always taking the first one. Thanks
663 to Pike for the patch. Closes #36.
664 * buildbot/test/test_slaves.py: match the change. to avoid huge
665 changes to the tests, I added a CHOOSE_SLAVES_RANDOMLY flag which
666 enables/disables the round-robin-ness (enabled by default), and
667 some unit tests disable it.
668 * docs/buildbot.texinfo (Buildmaster Architecture): document it
670 * buildbot/slave/bot.py (BuildSlave.__init__): rename the 'host'
671 argument to 'buildmaster_host', to make it more obvious that this
672 points to the buildmaster. Thanks to Bob Proulx for the
674 * buildbot/scripts/runner.py (slaveTAC): same
675 * buildbot/test/test_runner.py (Create.testSlave): match the change
677 * contrib/hg_buildbot.py: patch from Frederic Leroy to make this
680 2007-06-17 Brian Warner <warner@lothar.com>
682 * buildbot/test/test_config.py (Factories.testAllSteps): make sure
683 we can round-trip all of our current step classes by calling
684 getStepFactory() and using the results to make a clone of the
687 * buildbot/steps/maxq.py: fix import errors. Guess this hasn't been
690 * buildbot/process/factory.py (BuildFactory.addStep): To simplify
691 the config file, we're moving to using actual instances instead of
692 the (class, kwargs) 'step specification' tuples. BuildFactory
693 still keeps a list of tuples internally, but when real instances
694 are passed in to addStep(), they are asked for their class and
695 kwargs using the new BuildStep.getStepFactory method. BuildFactory
696 accepts both instances and the tuple form, and converts instances
697 to the tuple form, but the instance form is preferred because it
698 gives the Steps a chance to do argument validation. Closes: #11.
700 * buildbot/process/buildstep.py (BuildStep.__init__): record the
701 factory information necessary to implement getStepFactory. The
702 addFactoryArguments() method can be used to include arguments that
703 aren't passed to the BuildStep base class constructor.
704 (BuildStep.setBuild):
705 (BuildStep.setDefaultWorkdir): new methods to take parameters that
706 are needed for live BuildSteps but not to construct the specification
707 tuples that are stashed in the factory.
709 * buildbot/process/base.py (Build.setupBuild): pass 'build' and
710 'workdir' into new BuildSteps by using methods instead of
711 arguments. This makes the constructor for BuildSteps a lot
714 * buildbot/steps/*.py: update to match this change. Basically this
715 means adding calls to addFactoryArguments() in the __init__
716 methods to capture the arguments that aren't passed through to the
718 * buildbot/steps/shell.py (ShellCommand.setDefaultWorkdir): copy
719 the new workdir (if any) into the RemoteShellCommands arguments.
720 * buildbot/steps/source.py: allow workdir= to be optional,
721 implement setDefaultWorkdir() since we don't inherit from
722 (CVS): finally remove old clobber=/export=/copydir= arguments,
723 in favor of the mode= argument that's been around forever now.
724 * buildbot/steps/transfer.py: remove build= argument
726 * buildbot/test/*.py: update to match, generally by turning all
727 build= arguments into subsequent calls to s.setBuild()
728 * buildbot/test/test_config.py (Factories): verify that we can
729 use either BuildStep instances or class/kwarg tuples in both
730 BuildFactory.addStep and BuildFactory.__init__
732 * docs/buildbot.texinfo (Build Steps): document the new approach,
733 mention compatibility with the old approach, update all examples
734 to use the new style.
736 2007-06-16 Brian Warner <warner@lothar.com>
738 * buildbot/changes/svnpoller.py: when the poll fails, don't kill
739 the LoopingCall, just eat the failure so that we'll poll again
740 next time. This should allow us to tolerate (e.g.) sf.net SVN
741 failures more gracefully. Many thanks to Dustin Mitchell for the
744 2007-05-17 Brian Warner <warner@lothar.com>
746 * buildbot/status/words.py: refactor the IRC status bot into
747 separate 'Contact' and 'Channel' classes. The base Contact class
748 contains the interaction code: commands and responses. The
749 IRCContact subclass (and IrcStatusBot 'Channel') handle the
750 IRC-specific aspects. The plan is to write other subclasses for
751 other IM protocols like AIM and Jabber.
753 2007-04-16 Brian Warner <warner@lothar.com>
755 * CREDITS: update list of contributors. Thank you all!
757 2007-04-13 Brian Warner <warner@lothar.com>
759 * buildbot/status/mail.py (MailNotifier): add the project name to
760 the subject line and message body, to make it easier to
761 distinguish email coming from different buildmasters. Thanks to
762 Benoit Sigoure for the patch.
763 * buildbot/test/test_status.py (Mail): update to match
765 2007-03-24 Brian Warner <warner@lothar.com>
767 * buildbot/steps/transfer.py: open all files in 'b' binary mode to
768 avoid text-conversion problems between DOS/windows and unix.
769 Thanks to Phil Thompson for the patch. Fixes SF#1674927.
771 2007-03-03 Brian Warner <warner@lothar.com>
773 * buildbot/status/html.py (_hush_pyflakes): hush a pyflakes
774 warning about the use of Waterfall here
776 2007-03-01 Brian Warner <warner@lothar.com>
778 * buildbot/interfaces.py (IStatus.getBuilder): mention exceptions
780 2007-02-28 Brian Warner <warner@lothar.com>
782 * buildbot/changes/p4poller.py (P4Source): apply change from Scott
783 Lamb to use a more optimal form of 'p4 changes', to reduce server
784 load. He reports that this optimization was added to p4d release
785 2005.2, but it should work in all versions. Closes #27.
786 * buildbot/test/test_p4poller.py: match it
788 2007-02-27 Brian Warner <warner@lothar.com>
790 * buildbot/status/web/*.py: move all web status stuff into a
791 separate directory, in anticipation of splitting it into smaller
792 pieces and adding more files. html.py was getting way too big.
793 * buildbot/status/classic.css: move it too
794 * setup.py: add the new sub-package
795 * buildbot/test/test_web.py: match the changes
796 * MANIFEST.in: handle the move of classic.css
798 2007-02-07 Brian Warner <warner@lothar.com>
800 * contrib/OS-X/*: add some launchd .plist files for automatically
801 starting a buildmaster or buildslave under OS-X (10.4 or later).
802 Thanks to Mark Pauley for these.
804 2007-02-06 Brian Warner <warner@lothar.com>
806 * docs/buildbot.texinfo (Requirements): update requirements to
807 stop claiming compatibility with python-2.2 or twisted-1.3.x .
809 * README: mention python-2.5 and twisted-2.5 compatibility
811 * buildbot/clients/debug.py: hush pyflakes warnings by removing a
813 * buildbot/scripts/startup.py: same, by removing twisted-1.3.0
815 * buildbot/status/builder.py: same, by requiring cStringIO
816 * buildbot/status/words.py: same, remove twisted-1.3.0 compat
817 * buildbot/test/test_vc.py: same
818 * buildbot/test/test_web.py:
819 * buildbot/test/test_steps.py: same, remove unused import
821 * buildbot/status/html.py (StatusResourceBuild.body): oops, close
824 * buildbot/master.py (BuildMaster.loadConfig): warn the user if we
825 see any Builders that don't have Schedulers to drive them
827 * buildbot/master.py (BotPerspective.__repr__): fit bitrot, the
828 attributes this uses went away
830 * contrib/bb_applet.py (MyApplet.filled): add a small prefs
831 dialog, to allow you to reset the buildmaster and force
832 connect/disconnect. Correctly handle losing the buildmaster
833 connection (by switching the display to the hexnut, at which point
834 you can use the 'Connect' menu item to reconnect).
836 * buildbot/steps/source.py (Source.start): if we're using a patch,
837 add it as a LogFile to the checkout/update step. This will turn
838 into a link on the waterfall page.
840 * buildbot/scripts/tryclient.py (Try.createJob): implement --diff
841 option, to take the patch from a pre-made file rather than
842 generating it from the local tree. Thanks to Robert Helmer for the
843 idea. Closes #15 (the Trac ticket on the new http://buildbot.net/).
844 * buildbot/scripts/runner.py (TryOptions): add --diff,
845 --patchlevel, and --baserev options
846 * buildbot/scheduler.py (Try_Jobdir.parseJob): treat a baserev of ""
847 as None, meaning HEAD.
848 * buildbot/sourcestamp.py (SourceStamp): update docstring to
849 indicate that baserev=None means HEAD
850 * docs/buildbot.texinfo (try --diff): document it
852 * buildbot/test/test_steps.py (BuildStep): remove use of
853 reactor.iterate(), although the technique I replaced it with is a
854 gross polling hack that must be cleaned up properly some day. This
855 was the last use of reactor.iterate in the entire tree, yay.
857 2007-02-05 Brian Warner <warner@lothar.com>
859 * buildbot/status/mail.py (MailNotifier.__init__): assert that 'mode'
860 is one of the three known values, otherwise we emit some confusing
861 messages later on. Thanks to Grig Gheorghiu for the catch.
863 2007-01-30 Brian Warner <warner@lothar.com>
865 * buildbot/changes/bonsaipoller.py (BonsaiParser.__init__): Ben
866 Hearsum contributed a patch to let BonsaiPoller work with results
867 that contain non-ascii characters. Closes SF#1632641.
869 2007-01-27 Brian Warner <warner@lothar.com>
871 * Makefile (release): produce both .tar.gz and .zip source bundles.
874 2007-01-23 Brian Warner <warner@lothar.com>
876 * buildbot/changes/freshcvsmail.py: hush a pyflakes warning
877 * buildbot/changes/monotone.py: same
879 * buildbot/changes/maildir.py: combine several files into one,
880 clean up maildir.py to use Services properly.
881 * buildbot/changes/maildirtwisted.py: remove
882 * buildbot/changes/maildirgtk.py: remove, it wasn't used by
884 * buildbot/changes/mail.py: match the change
885 * buildbot/scheduler.py: same, since Try_Jobdir uses a maildir
886 * buildbot/test/test_maildir.py: remove use of reactor.iterate()
888 * buildbot/slave/commands.py (command_version): bump to "2.3" to
889 indicate that the buildslave knows about the 'bzr' command
891 2007-01-22 Brian Warner <warner@lothar.com>
893 * buildbot/process/builder.py (Builder.fireTestEvent): don't use
894 'with', it will become a reserved work in python2.6 .
896 * contrib/bb_applet.py: add a simple gnome-panel applet, to
897 display a terse summary of buildbot status.
898 * docs/hexnut32.png, docs/hexnut48.png, docs/hexnut64.png: add
899 some icons, small versions of the Blender object that lives in
900 docs/images/icon.blend
902 * buildbot/steps/source.py (Bzr): add Bazaar-ng support
903 * buildbot/slave/commands.py (Bzr): same
904 * buildbot/scripts/tryclient.py (BzrExtractor): same
905 (SourceStampExtractor.dovc): modify this to allow non-zero exit
906 status, since 'bzr diff' does that
907 * buildbot/test/test_vc.py (Bzr): same
908 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
912 2007-01-20 Brian Warner <warner@lothar.com>
914 * contrib/darcs_buildbot.py: tidy up the progress messages
916 2007-01-17 Brian Warner <warner@lothar.com>
918 * contrib/darcs_buildbot.py: enhance to handle multiple patches
919 being pushed at a time. This keeps state in the repository in a
920 small file named .darcs_buildbot-lastchange, but that shouldn't
921 interfere with normal repository operations. Fixes SF#1534049.
922 * buildbot/clients/sendchange.py (Sender): make a single Sender
923 capable of sending Changes with different usernames.
925 2006-12-11 Brian Warner <warner@lothar.com>
927 * buildbot/changes/freshcvsmail.py: mark this file as deprecated,
928 scheduled for removal in 0.7.7 . The FCMaildirSource was moved to
929 buildbot.changes.mail a long time ago, but I forgot to add the
930 DeprecationWarning until now.
932 * buildbot/process/maxq.py: remove this, the functionality now
933 lives in buildbot.steps.maxq
935 * buildbot/clients/debug.py: remove an unnecessary gnome.ui import
936 * buildbot/clients/gtkPanes.py: remove unused import
938 * buildbot/slave/trial.py: remove an unused/incomplete/buggy file,
939 that was meant to provide a special Reporter to run inside trial
940 and give the buildslave lots of machine-readable status. We never
941 finished this project.
943 * buildbot/changes/bonsaipoller.py: remove unused imports
944 * buildbot/changes/svnpoller.py: same
945 * buildbot/process/builder.py: same
946 * buildbot/process/buildstep.py: same
947 * buildbot/slave/bot.py: hush pyflakes warning
948 * buildbot/status/tests.py: remove unused imports
949 * buildbot/status/tinderbox.py: same
950 * buildbot/steps/python_twisted.py: same
952 * buildbot/process/step.py: remove this file, these names were
953 deprecated in 0.7.5 and are now being removed.
954 * buildbot/process/step_twisted.py: same
955 * buildbot/test/test_steps.py (ReorgCompatibility): remove test
957 * buildbot/twcompat.py: remove the empty file, yay it is gone
959 * buildbot/twcompat.py (waitForDeferred): remove the monkeypatch,
960 tw-2.0.0 and newer have the method we need.
961 (getProcessOutputAndValue): same
962 (which): remove this method, tw-2.0.0 t.p.procutils has it
964 * buildbot/twcompat.py (implements): remove this method
965 * buildbot/*: import implements() from zope.interface directly
967 * buildbot/status/mail.py: stop falling back to importing
968 twisted.protocols.smtp.sendmail, now that we don't need tw-1.3.0
971 * buildbot/twcompat.py (Interface): remove this import
972 * buildbot/*: import Interface from zope.interface directly
974 * buildbot/twcompat.py (providedBy): remove this method
975 * buildbot/*: turn all uses of providedBy(obj, iface) into
976 iface.providedBy(obj)
978 * buildbot/twcompat.py (maybeWait): remove this method, now that
979 we no longer maintain compatibility with Twisted<=1.3.0 .
980 Twisted-2.0.0 and later allow trial methods to return Deferreds
982 * buildbot/test/*: remove all uses of maybeWait
984 * buildbot/__init__.py (version): bump to 0.7.5+ while between
986 * docs/buildbot.texinfo: same
988 2006-12-10 Brian Warner <warner@lothar.com>
990 * buildbot/__init__.py (version): Releasing buildbot-0.7.5
991 * docs/buildbot.texinfo: set version to match
993 2006-12-10 Brian Warner <warner@lothar.com>
995 * README (REQUIREMENTS): update for release
996 * NEWS: update for release
997 * buildbot/slave/commands.py (command_version): mention that this
998 version (2.2) was released with buildbot-0.7.5
1000 * buildbot/test/test_config.py (StartService.testStartService):
1001 inhibit the usual read-config-on-startup behavior, since otherwise
1002 the log.err that gets recorded causes the test to fail
1004 * buildbot/status/builder.py (LogFile.finish): forget about all
1005 subscribers once the log has finished, since after that point
1006 we're never going to use them again. This might help free up some
1009 * buildbot/clients/debug.py: update to use gtk.main_quit() rather
1010 than the old/deprecated gtk.mainquit()
1012 2006-12-09 Brian Warner <warner@lothar.com>
1014 * buildbot/steps/transfer.py (_FileWriter.__del__): handle errors
1015 better when we can't open the masterdst file
1017 * buildbot/scripts/startup.py (Follower._failure): add missing
1018 import statement for BuildSlaveDetectedError
1020 * buildbot/steps/transfer.py (FileUpload): cleanup
1021 (FileDownload): same. Add tests for slave version, add mode=.
1022 * buildbot/slave/commands.py (SlaveFileUploadCommand): same
1023 (SlaveFileDownloadCommand): same
1024 * buildbot/test/test_transfer.py: enhance tests
1025 * buildbot/test/runutils.py (makeBuildStep): create a fake form of
1028 2006-12-08 Brian Warner <warner@lothar.com>
1030 * buildbot/scripts/runner.py (sendchange): halt the reactor on
1031 both success *and* failure. Without this, the 'buildbot
1032 sendchange' command would hang if it could not contact the
1033 buildmaster or deliver the Change, which would generally cause the
1034 user's commit/record/checkin command to hang too. Thanks to
1035 Christian Unger for the catch.
1037 2006-12-06 Brian Warner <warner@lothar.com>
1039 * NEWS: update with items for the next release
1041 * docs/buildbot.texinfo (Adding LogObservers): add a somewhat
1042 whimsical example pulled from a punch-drunk email I sent out late
1044 (Transferring Files): document some of the other parameters
1045 (Adding LogObservers): update to 0.7.5 buildbot.steps.*
1046 (SVNPoller): rename svnpoller.SvnSource to SVNPoller
1047 * buildbot/test/test_svnpoller.py: same
1048 * buildbot/changes/svnpoller.py (SVNPoller): same
1050 2006-11-26 Brian Warner <warner@lothar.com>
1052 * docs/buildbot.texinfo (Build Properties): remind users that
1053 WithProperties must appear in a command= list, not as a top-level
1055 * buildbot/steps/shell.py (ShellCommand.start): and assert that
1056 we're sending a list or a single string to the RemoteShellCommand
1058 * buildbot/scheduler.py (Nightly): Improve docs slightly.
1060 * buildbot/scripts/startup.py (start): skip the whole
1061 watch-the-logfile thing under windows, since it needs os.fork()
1063 * buildbot/scripts/runner.py (restart): remove the old message
1064 that got printed after the buildbot was restarted.. it most cases
1065 it didn't get printed at the right time anyways
1067 2006-11-25 Brian Warner <warner@lothar.com>
1069 * buildbot/scripts/runner.py: enhance 'start' and 'restart' to
1070 follow twistd.log and print lines until the process has started
1071 started properly. For the buildmaster, this means until the config
1072 file has been parsed and accepted. For the buildslave, this means
1073 until we've connected to the master. We give up after 5 seconds in
1074 any case. Helpful error messages and troubleshooting suggestions
1075 are printed when we don't see a successful startup. This closes the
1076 remainder of SF#1517975.
1077 * buildbot/scripts/startup.py: moved app startup code to here
1078 * buildbot/scripts/logwatcher.py: utility class to follow log
1079 * buildbot/scripts/reconfig.py: rewrite to use LogWatcher
1080 * buildbot/slave/bot.py: announce our BuildSlaveness to the log
1081 so the LogWatcher can tell the difference between a buildmaster
1084 2006-11-24 Brian Warner <warner@lothar.com>
1086 * docs/examples/twisted_master.cfg: update to match the version
1087 in use on twistedmatrix.com
1088 (IRC): re-enable IRC bot. The 'irc.us.freenode.net' hostname I
1089 was using before stopped working, but 'irc.freenode.net' works
1092 * buildbot/scripts/runner.py (run): oops, forgot to enable the new
1095 * buildbot/clients/base.py (TextClient.not_connected): upon
1096 UnauthorizedLogin failures, remind the user to connect to the
1097 PBListener port instead of the slaveport.
1098 (TextClient.disconnected): shut down more quietly
1099 * docs/buildbot.texinfo (statuslog): add another reminder
1101 * buildbot/scripts/runner.py (Options.subCommands): rename
1102 'buildbot sighup DIR' to 'buildbot reconfig DIR', but keep
1103 'sighup' as an alias.
1104 * buildbot/scripts/reconfig.py (Reconfigurator): enhance the
1105 reconfig command to follow twistd.log and print all of the lines
1106 from the start of the config-file reload to its completion. This
1107 should make it a lot easier to discover bugs in the config file.
1108 Use --quiet to disable this behavior. This addresses half of
1109 SF#1517975, the other half will be to add this same utility to
1110 'buildbot start' and 'buildbot restart'.
1111 * docs/buildbot.texinfo (Loading the Config File): same
1114 * buildbot/interfaces.py (IBuilderControl.forceBuild): remove this
1115 method, it has been deprecated for a long time. Use
1116 IBuilderControl.requestBuild instead.
1117 * buildbot/process/builder.py (BuilderControl.forceBuild): remove
1118 * buildbot/master.py (BotPerspective.perspective_forceBuild): same
1119 * buildbot/slave/bot.py (Bot.debug_forceBuild): same
1120 * buildbot/test/test_control.py (Force.testForce): same
1121 * buildbot/test/test_run.py: use requestBuild instead
1123 * buildbot/clients/debug.py: replace 'Force Build' button with
1124 'Request Build' (which just adds one to the queue), add Ping
1125 Builder, add branch/revision fields to Request Build.
1126 * buildbot/clients/debug.glade: same
1127 * buildbot/master.py: update interface to match. This creates an
1128 incompatibility between new debugclients and old buildmasters.
1130 * buildbot/process/builder.py (Builder._attached): delay the call
1131 to maybeStartBuild for a reactor turn, to avoid starting a build
1132 in the middle of a reconfig (say, if the new Builder uses a new
1133 slave which is already connected).
1135 2006-11-23 Brian Warner <warner@lothar.com>
1137 * buildbot/test/test_transfer.py: appease pyflakes
1138 * buildbot/test/test_steps.py: same
1140 * buildbot/test/test_bonsaipoller.py: remove the 'import *' that
1141 keeps pyflakes from finding undefined names
1143 * buildbot/master.py (BuildMaster.loadConfig_Builders): changing a
1144 Builder no longer induces a disconnect/reconnect cycle. This means
1145 that any builds currently in progress will not be interrupted, and
1146 any builds which are queued in the Builder will not be lost. This
1147 is implemented by having the new Builder extract the state (i.e.
1148 all pending Builds and any desired SlaveBuilders) from the old
1150 (BotPerspective): refactor. The BotPerspective no longer keeps
1151 track of all the Builders that want to use this slave; instead, it
1152 asks the BotMaster each time it needs this list. This removes
1153 addBuilder and removeBuilder. Clean up attached() to acquire all
1154 the slave's information in a more atomic fashion. updateSlave() is
1155 now the way to make sure the slave is using the right set of
1156 Builders: just call it after everything else has been
1158 (BotMaster): refactor, removing addBuilder/removeBuilder and
1159 replacing them with an all-at-once setBuilders() call.
1161 * buildbot/test/test_slaves.py (Reconfig): new test case to
1162 exercise this functionality
1163 * buildbot/steps/dummy.py (Wait): new dummy BuildStep for the test
1164 * buildbot/slave/commands.py (WaitCommand): same
1166 * docs/buildbot.texinfo (Loading the Config File): document the
1169 * buildbot/process/builder.py (SlaveBuilder): refactor. Allow the
1170 SlaveBuilder to have its parent Builder changed.
1171 (SlaveBuilder.isAvailable): new method to give access to state,
1172 which is now a private attribute
1173 (SlaveBuilder.buildStarted,buildFinished): new methods to inform
1174 the SlaveBuilder about how it is being used. These methods update
1175 its internal state. buildFinished() is now the place that invokes
1176 maybeStartBuild() on its parent Builder.
1177 (Builder.consumeTheSoulOfYourPredecessor): new method to allow a
1178 new Builder to take over for an old one, transferring state from
1180 (Buider): refactor the way that SlaveBuilders are used to match,
1181 giving them a bit more autonomy.
1182 (Builder.buildFinished): this no longer calls maybeStartBuild():
1183 instead the SlaveBuilder calls it on whoever its parent Builder is
1184 at the time. This way, when an old Builder is replaced by a new
1185 one, and there was a build in progress during the transition, when
1186 that build finishes, it will be the new Builder that is told about
1187 the newly available slave so it can start a new build.
1189 * buildbot/process/base.py (Build.startBuild._release_slave): when
1190 the Build finishes, tell the SlaveBuilder that they've been
1193 * buildbot/status/builder.py (SlaveStatus): add some new setter
1194 methods for use by BotPerspective, to keep some attributes more
1197 * buildbot/slave/bot.py (Bot.remote_getDirs): this is no longer
1198 called by the buildmaster.
1199 (Bot.setBuilderList): instead, we locally announce any leftover
1200 directories based upon which Builders we were told about. The
1201 master doesn't really care; it's the local admin who may or may not
1202 wish to delete them.
1205 * contrib/svn_buildbot.py: use /usr/bin/python, not /usr/bin/env,
1206 to allow use of python2.4 or whatever. This tool still requires
1209 2006-11-19 Brian Warner <warner@lothar.com>
1211 * NEWS (IStatusLog.readlines): more news items
1213 2006-11-18 Brian Warner <warner@lothar.com>
1215 * NEWS: start collecting items for the next release.
1217 2006-11-04 Brian Warner <warner@lothar.com>
1219 * buildbot/changes/bonsaipoller.py: apply updates from Ben
1220 Hearsum. Closes SF#1590310.
1221 * buildbot/test/test_bonsaipoller.py: and tests
1223 * buildbot/status/tinderbox.py
1224 (TinderboxMailNotifier.buildMessage): send out a "testfailed"
1225 status when the build results in WARNINGS. Patch from Dave
1226 Liebreich. Closes SF#1587352.
1228 * buildbot/slave/commands.py (LogFileWatcher.poll): overcome a
1229 linux-vs-osx behavior difference w.r.t. reading from files that
1230 have reached EOF. This should fix LogFileWatcher on OS-X. Thanks
1231 to Mark Rowe for the patch.
1233 2006-10-15 Brian Warner <warner@lothar.com>
1235 * buildbot/interfaces.py (IStatus.getURLForThing): oops, the
1236 method name was misspelled in the interface definition. Thanks to
1237 Roy Rapoport for the catch.
1239 2006-10-13 Brian Warner <warner@lothar.com>
1241 * docs/buildbot.texinfo (Adding LogObservers): update sample code
1242 to match the great Steps renaming
1244 * buildbot/steps/transfer.py (FileUpload.start): Fix stupid error.
1245 Maybe I should run my own unit tests before recording a big
1246 change. Good thing I've got a buildbot to remind me.
1248 2006-10-12 Brian Warner <warner@lothar.com>
1250 * buildbot/steps/transfer.py: rework __init__ and args setup
1251 * buildbot/slave/commands.py (SlaveFileDownloadCommand): minor
1253 * buildbot/slave/commands.py (SlaveFileDownloadCommand.setup):
1254 when opening the target file, only catch IOError (to report via
1255 stderr/rc!=0), let the others be reported as normal exceptions
1257 2006-10-08 Brian Warner <warner@lothar.com>
1259 * contrib/svn_watcher.py: fix security holes by using proper argv
1260 arrays and subprocess.Popen() rather than commands.getoutput().
1261 Thanks to Nick Mathewson for the patch. Note that svn_watcher.py
1262 is deprecated in favor of buildbot/changes/svnpoller.py, and will
1263 probably be removed by the next release.
1266 2006-10-04 Brian Warner <warner@lothar.com>
1268 * buildbot/steps/python.py (PyFlakes.createSummary): skip any
1269 initial lines that weren't emitted by pyflakes. When the pyflakes
1270 command is run under a Makefile, 'make' will echo the command it
1271 runs to stdio, and that was getting logged as a "misc" warning.
1272 * buildbot/test/test_steps.py (Python.testPyFlakes2): test it
1273 * buildbot/test/test_steps.py (testPyFlakes3): another test
1275 2006-10-01 Brian Warner <warner@lothar.com>
1277 * buildbot/status/html.py (HtmlResource.render): if we get a
1278 unicode object from our content() method, encode it into utf-8
1279 like we've been claiming to all along. This allows the comments
1280 and author names from svnpoller.py to be delivered properly.
1282 * buildbot/changes/svnpoller.py (SvnSource.create_changes):
1283 de-unicodify filenames before creating the Change, because the
1284 rest of buildbot is unlikely to handle them well. Leave the 'who'
1285 field as a unicode object.. I don't think there's anything that
1286 will break very soon, and it will probably nudge us towards
1287 accepting unicode everywhere sooner or later. Stop using the
1288 "date" field that comes out of SVN, since it is using the
1289 repository's clock (and timezone) and what we care about is the
1290 buildmaster's (otherwise Changes from the future show up later
1291 than the builds they triggered).
1292 * buildbot/test/test_svnpoller.py (Everything.test1): match the
1295 * buildbot/changes/svnpoller.py (SvnSource): added Niklaus Giger's
1296 Suvbersion repository polling ChangeSource. I've hacked it up
1297 considerably: any bugs are entirely my own fault. Thank you
1299 * buildbot/test/test_svnpoller.py: tests for it
1300 * docs/buildbot.texinfo (SvnSource): document it
1302 2006-09-30 Brian Warner <warner@lothar.com>
1304 * buildbot/scheduler.py (Periodic): submit a reason= to the
1305 BuildSet to indicate which Scheduler triggered the build. Thanks
1306 to Mateusz Loskot for the suggestion.
1308 * buildbot/test/test_scheduler.py (Scheduling.testPeriodic1): test it
1310 * buildbot/changes/p4poller.py (P4Source): some minor stylistic
1311 changes: set self.loop in __init__, remove unused volatile=
1313 * docs/buildbot.texinfo (.buildbot config directory): add more
1314 docs on the .buildbot/options keys used by "buildbot try"
1315 * buildbot/scripts/tryclient.py (Try.createJob): remove dead code
1316 (Try.deliverJob): same
1318 * buildbot/changes/bonsaipoller.py (BonsaiParser): more updates
1320 (BonsaiPoller): same
1322 * buildbot/slave/commands.py (LogFileWatcher.stop): explicitly
1323 close the filehandle when we stop watching the file. Before, the
1324 filehandle was only closed when the LogFileWatcher was
1325 garbage-collected, which could be quite a while in the future. If
1326 it was still open by the time the next build started, windows will
1327 refuse to let the new build delete the old build/ directory. Fixes
1328 SF#1568415, thanks to <scmikes>, <FireMoth>, and <radix> on
1329 #twisted for the catch.
1331 2006-09-29 Brian Warner <warner@lothar.com>
1333 * buildbot/status/tinderbox.py (TinderboxMailNotifier): updates
1336 2006-09-25 Brian Warner <warner@lothar.com>
1338 * setup.py: the new buildbot.steps module wasn't being installed.
1339 Thanks to Jose Dapena Paz for the catch, fixes SF#1560631.
1340 (testmsgs): add the extra stuff from buildbot/test/* so you can
1341 run unit tests on an installed copy of buildbot, not just from
1344 * contrib/svn_buildbot.py (ChangeSender.getChanges): the first *4*
1345 columns of 'svnlook changed' output contain status information, so
1346 strip [:4] instead of [:6]. Depending upon what the status flags
1347 were, this would sometimes lead to mangled filenames. Thanks to
1348 Riccardo Magliocchetti for the patch. Closes SF#1545146.
1350 * buildbot/steps/source.py (Monotone): initial Monotone support,
1351 contributed by Nathaniel Smith. Still needs docs and tests, but
1352 this code has been in use on the Monotone buildbot for a long
1354 * buildbot/slave/commands.py (Monotone): slave-side support
1355 * buildbot/changes/monotone.py (MonotoneSource): polling change
1358 * buildbot/changes/bonsaipoller.py (BonsaiPoller): Ben also
1359 contributed a Change Source that polls a Bonsai server (a
1360 kind of web-based viewcvs CGI script).
1362 * buildbot/status/tinderbox.py (TinderboxMailNotifier): Ben
1363 Hearsum contributed a status plugin which sends email in the same
1364 format that Tinderbox does: this allows a number of tinderbox
1365 tools to be driven by Buildbot instead. Thanks Ben!
1367 2006-09-24 Brian Warner <warner@lothar.com>
1369 * buildbot/changes/mail.py (parseBonsaiMail): fix the parser.
1370 Thanks to Robert Helmer for the patch.
1372 * buildbot/process/base.py (Build.setupSlaveBuilder): tell our
1373 BuildStatus about the buildslave name at the *beginning* of the
1374 build, rather than at the end. Thanks to Alexander Lorenz for the
1376 * buildbot/status/html.py (StatusResourceBuild.body): always
1377 include the slavename in the build page, not just when the build
1379 * buildbot/status/mail.py (MailNotifier.buildMessage): include the
1380 slavename in the email message
1382 2006-09-21 Brian Warner <warner@lothar.com>
1384 * buildbot/scripts/sample.cfg: update to use new BuildStep classes
1386 * docs/examples/glib_master.cfg: same
1387 * docs/examples/hello.cfg: same
1388 * docs/examples/twisted_master.cfg: same, update to current usage
1390 2006-09-19 Brian Warner <warner@lothar.com>
1392 * buildbot/steps/python.py (PyFlakes): refactor, add summary logs
1393 (PyFlakes.createSummary): make it compatible with python-2.2
1395 * buildbot/test/test_steps.py (Python.testPyFlakes): add a test
1396 for at least the output-parsing parts of PyFlakes
1398 2006-09-18 Brian Warner <warner@lothar.com>
1400 * buildbot/steps/python.py: oops, fix import of StringIO
1402 2006-09-17 Brian Warner <warner@lothar.com>
1404 * buildbot/test/test_vc.py (VCBase._do_vctest_update_retry_1): it
1405 turns out that SVN-1.4.0 doesn't fail to update once you've
1406 replaced a file with a directory, unlike older versions of SVN and
1407 pretty much every other VC tool we support. Since what we really
1408 care about is that the update succeeds anyway, stop checking that
1409 the tree got clobbered and just assert that the build succeeded.
1410 (VCBase.printLogs): add a utility function for debugging
1412 * buildbot/process/step.py: oops, added extra imports by mistake
1414 * buildbot/changes/p4poller.py (P4Source._process_describe): do an
1415 rstrip() on the first line coming out of the 'p4 describe'
1416 process, to remove the stray ^M that Wade Brainerd reports seeing
1417 in the 'when' field. Fixes SF#1555985.
1419 * buildbot/master.py (BuildMaster.loadConfig): improve the error
1420 message logged when c['schedulers'] is not right
1421 * buildbot/scheduler.py (Scheduler.__init__): improve error
1422 message when a Scheduler() is created with the wrong arguments
1423 * buildbot/test/test_config.py (ConfigTest.testSchedulerErrors):
1424 verify that these error messages are emitted
1426 * buildbot/process/buildstep.py: rename step.py to buildstep.py .
1427 The idea is that all the base classes (like BuildStep and
1428 RemoteCommand and LogObserver) live in b.p.buildstep, and b.p.step
1429 will be a leftover backwards-compatibility file that only contains
1430 aliases for the steps that were moved out to buildbot.steps.*
1431 * lots: change imports to match
1432 * buildbot/process/step.py: add a DeprecationWarning if it ever
1435 2006-09-12 Brian Warner <warner@lothar.com>
1437 * buildbot/scheduler.py (Scheduler.__init__): make sure that
1438 builderNames= is actually a sequence, since if you happen to give
1439 it a single builder-specification dictionary instead, it won't get
1440 caught by the existing assert. Thanks to Brett Neely for the
1443 * buildbot/steps/python.py (BuildEPYDoc, PyFlakes): add new steps. No
1445 * docs/buildbot.texinfo (Python BuildSteps): document them
1446 (sendchange): include a link to PBChangeSource, since you need one
1448 * buildbot/steps/shell.py: clean up test-case-name line, remove some
1450 * buildbot/steps/dummy.py: same
1452 2006-09-08 Brian Warner <warner@lothar.com>
1454 * buildbot/steps/transfer.py (FileUpload,FileDownload): new
1455 BuildStep which lets you transfer files from the master to the
1456 slave or vice versa. Thanks to Albert Hofkamp for the original
1457 patch. Fixes SF#1504631.
1458 * buildbot/slave/commands.py (SlaveFileUploadCommand): slave-side
1460 (SlaveFileDownloadCommand): same
1461 * docs/buildbot.texinfo (Transferring Files): document it
1462 * buildbot/test/test_transfer.py: test it
1463 * buildbot/test/runutils.py (StepTester): new utility class for
1464 testing BuildSteps and RemoteCommands without Builds or Bots or PB
1465 * buildbot/test/test_steps.py (CheckStepTester): validate that the
1468 * buildbot/interfaces.py (IStatusLog.readlines): make it easier to
1469 walk through StatusLogs one line at a time, mostly for the benefit
1470 of ShellCommand.createSummary methods. You can either walk through
1471 STDOUT or STDERR, but the default is STDOUT.
1473 * buildbot/status/builder.py (LogFile.readlines): implement it.
1474 Note that this is not yet memory-efficient, it just pulls the
1475 whole file into RAM and then splits it up with a StringIO.
1476 Eventually this should be a generator that only pulls chunks from
1478 * buildbot/test/test_status.py (Log.testReadlines): test it
1480 * docs/buildbot.texinfo: update to match changes
1481 * buildbot/process/factory.py: stop using old definitions
1482 * buildbot/process/process_twisted.py: same
1483 * buildbot/test/test_*.py: same
1485 * buildbot/process/step_twisted.py: move definition to..
1486 * buildbot/steps/python_twisted.py: .. here, unfortunately python's
1487 relative-import mechanisms prevent this from being named 'twisted'
1488 or 'python/twisted' as I would have preferred.
1490 * buildbot/process/maxq.py: move definition to..
1491 * buildbot/steps/maxq.py: .. here, leave a compatibility import
1493 * buildbot/process/step.py: split the user-visible BuildSteps into
1494 separate files, all under buildbot/steps/
1495 * buildbot/steps/source.py: this holds VC-checkout steps like SVN
1496 * buildbot/steps/shell.py: this holds ShellCommand and friends
1497 * buildbot/steps/dummy.py: this holds the testing steps like Dummy
1499 2006-09-05 Brian Warner <warner@lothar.com>
1501 * lots: run pyflakes, removed a lot of unused imports, changed the
1502 form of some conditional imports to remove false pyflakes
1503 warnings. There are still a number of warnings left, mostly from
1504 imports that are done for their side-effects.
1505 * buildbot/test/test_vc.py: import twisted.python.failure, since it
1508 2006-08-26 Brian Warner <warner@lothar.com>
1510 * buildbot/test/test_locks.py (Unit.testLater): make the tests
1511 compatible with twisted-1.3.0, for some reason I just can't seem
1512 to let go of the past.
1514 2006-08-25 Brian Warner <warner@lothar.com>
1516 * buildbot/status/mail.py (MailNotifier.__init__): fix typo in docs
1518 * buildbot/process/step.py (LoggingBuildStep.startCommand): set up
1519 all logfiles= in startCommand(), rather than in start() . This
1520 makes it easier to have the 'stdio' log come before any secondary
1521 logfiles, which I feel makes the waterfall display more
1523 (LoggingBuildStep.setupLogfiles): move the addLog/cmd.useLog code
1524 from ShellCommand up into LoggingBuildStep
1525 (LoggingBuildStep.__init__): move the handling of logfiles= from
1526 ShellCommand up to LoggingBuildStep, because startCommand is
1527 provided by LoggingBuildStep, whereas start() was specific to
1528 subclasses like ShellCommand and Source. This removes code
1529 duplication in those subclasses.
1530 (ShellCommand.__init__): same
1531 (ShellCommand.checkForOldSlaveAndLogfiles): split out the check
1532 for a slave that's too old to understand logfiles= into a separate
1533 method, so it can live in ShellCommand. The rest of
1534 setupLogfiles() can live in LoggingBuildStep.
1536 2006-08-24 Brian Warner <warner@lothar.com>
1538 * buildbot/locks.py (BaseLock): you can now configure Locks to
1539 allow multiple simultaneous owners. They still default to
1540 maxCount=1. Fixes SF#1434997. Thanks to James Knight (foom) for
1542 * docs/buildbot.texinfo (Interlocks): document the new options
1543 * buildbot/test/test_locks.py: add a bunch of new unit tests
1544 * buildbot/process/base.py (Build.acquireLocks): locks now offer
1545 waitUntilMaybeAvailable, not waitUntilAvailable
1546 * buildbot/process/step.py (BuildStep.acquireLocks): same
1547 * buildbot/master.py (BotMaster.getLockByID): real locks now use
1548 the whole lockid in their constructor, not just the name. Also,
1549 keep track of which real locks we've handed out by the full
1550 lockid, not just class+name, otherwise changing just the maxCount=
1551 in the master.cfg file would not actually cause a behavioral
1554 2006-08-23 Brian Warner <warner@lothar.com>
1556 * buildbot/__init__.py (version): bump to 0.7.4+ while between
1558 * docs/buildbot.texinfo: same
1560 2006-08-23 Brian Warner <warner@lothar.com>
1562 * buildbot/__init__.py (version): Releasing buildbot-0.7.4
1563 * docs/buildbot.texinfo: set version to match
1564 * NEWS: update for 0.7.4
1565 * buildbot/slave/commands.py (command_version): mention that this
1566 version (2.1) was released with buildbot-0.7.4
1568 2006-08-22 Brian Warner <warner@lothar.com>
1572 * CREDITS: new file, list of people who have helped. Thanks!
1573 * MANIFEST.in: ship it
1575 * MANIFEST.in: stop shipping the old PyCon-2003 paper.. with the
1576 new diagrams, the user's manual is more informative than it was.
1577 Start shipping the .html user's manual (and generated .png
1579 * Makefile: update 'release' target to match
1581 * buildbot/test/test_web.py (GetURL.testBrokenStuff): delete this
1582 test.. I think the web-parts effort will render it pointless well
1583 before it ever actually starts to work.
1585 2006-08-20 Brian Warner <warner@lothar.com>
1587 * buildbot/changes/pb.py (PBChangeSource): fix and simplify
1588 meaning of the prefix= argument. It is now just a string which is
1589 stripped from the beginning of the filename. If prefix= is set but
1590 not found on any given filename, that filename is ignored. If all
1591 filenames in a Change are ignored, the Change is dropped. This is
1592 much simpler than the previous sep= nonsense, and I should have
1593 implemented it this way from the beginning. Effectively resolves
1594 SF#1217699 and SF#1381867. Thanks to Gary Granger and Marius
1595 Gedminas for the catch and suggested fixes.
1596 (ChangePerspective.perspective_addChange): implement the actual
1598 * buildbot/test/test_changes.py (TestChangePerspective): test it
1599 * docs/buildbot.texinfo (PBChangeSource): document it, explain
1600 how to properly use prefix=
1601 * docs/examples/twisted_master.cfg (source): update prefix= by
1602 adding the trailing slash
1605 * docs/examples/twisted_master.cfg: update to actual practice
1607 * buildbot/test/test_web.py (WaterfallSteps.test_urls): oops,
1608 update test case to match new link text.. the HREF has both a
1609 class= setting and an enclosing [] pair that I didn't match in the
1612 * docs/buildbot.texinfo (ShellCommand.command=): explain why a
1613 list of strings is preferred over a single string with embedded
1615 (ShellCommand.description=): explain that either single strings or
1616 a list of strings is acceptable, and why you might prefer one over
1617 the other. Add an example. Fixes SF#1524659, thanks to Paul
1618 Winkler for the catch.
1619 (Build Steps): update to use f.addStep() rather than using s()
1620 and the constructor list
1622 * buildbot/process/step.py (ShellCommand): accept either a single
1623 string or a list of strings in both description= and
1625 * buildbot/test/test_steps.py (Steps.test_description): test it
1626 * buildbot/test/runutils.py (makeBuildStep): support for that test
1628 * contrib/CSS/*.css: add some contributed CSS stylesheets, to make
1629 the Waterfall display a bit less ugly. Thanks to John O'Duinn for
1630 collecting the files and creating the patch.
1632 * docs/buildbot.texinfo (BuildStep URLs): document new feature:
1633 per-step URLs that will be displayed on the waterfall display,
1634 for things like the HTML output of code-coverage tools, when
1635 the results are hosted elsewhere.
1636 * buildbot/interfaces.py (IBuildStepStatus.getURLs): document the
1637 way to retrieve these URLs
1638 * buildbot/status/builder.py (BuildStepStatus.getURLs): implement
1639 the method to retrieve these URLs. Also provide backwards
1640 compatibility for saved BuildStepStatus instances that didn't have
1642 * buildbot/process/step.py (BuildStep.addURL): method to set these
1643 URLs from within a BuildStep
1644 * buildbot/status/html.py (StepBox.getBox): emit links to the URLs
1645 (StepBox.getBox): give these external links a distinct CSS class
1646 named "BuildStep external" so a .css file can display them
1649 * buildbot/test/test_web.py (WaterfallSteps): test that we really
1651 * buildbot/test/test_steps.py (Steps): test that we can all the
1652 URLs. Also add a bunch of other tests on methods that can be
1653 called from within BuildSteps
1654 * buildbot/test/runutils.py (makeBuildStep): add utility function
1656 2006-08-13 Brian Warner <warner@lothar.com>
1658 * docs/buildbot.texinfo (BuildStep LogFiles): document them
1660 2006-08-10 Brian Warner <warner@lothar.com>
1662 * docs/buildbot.texinfo (Index of master.cfg keys): add another
1663 index, this one of things like c['sources'] and c['schedulers']
1664 (indices): it looks like my clever idea of putting the @fooindex
1665 commands in between the @node and the @subsection (to make the
1666 HREF anchor jump to slightly above the section title, which works
1667 much better in html) confused texinfo horribly, so I'm moving the
1668 index tags back to be just after the @subsection marker. I also
1669 added extra lines between the @node/@section paragraph and the
1670 index tags, since I think maybe texinfo wants to see these be
1671 separate paragraphs.
1673 * docs/Makefile (images): make sure images get built when
1674 rendering the manual
1675 * docs/images/Makefile: same
1677 * buildbot/scripts/runner.py: rename 'buildbot master' to
1678 'buildbot create-master', and 'buildbot slave' to 'buildbot
1680 * docs/buildbot.texinfo: same
1683 * docs/buildbot.texinfo: reimplement the "useful classes" index
1684 with actual texinfo indices. The .info rendering is a bit
1685 weird-looking but it works well, and the HTML rendering is quite
1686 nice. This also puts the index targets in the regular flow of the
1687 text, which is easier to maintain.
1689 2006-08-06 Brian Warner <warner@lothar.com>
1691 * buildbot/slave/commands.py (ShellCommand.__init__): patch from
1692 Kevin Turner to prefer the environ= argument be a list rather than
1693 a string. If it is a list, it will be joined with a platform-local
1694 os.pathsep delimiter, and then prepended to any existing
1695 $PYTHONPATH value. This works better in cross-platform (i.e.
1696 windows buildslaves) environments when you need to push multiple
1697 directories onto the front of the path.
1698 (SlaveShellCommand): documented the new magic
1699 * docs/buildbot.texinfo (ShellCommand): documented the new magic
1700 in a user-visible form
1702 * buildbot/test/test_vc.py (BaseHelper.dovc): patch from Kevin
1703 Turner to prefer lists over strings when creating/running VC
1704 commands during unit tests. This is clearly necessary to survive
1705 vcexe containing spaces, like "C:\Program Files\darcs.exe". I
1706 renamed the wq() function to qw() though, since that's how it's
1707 spelled in perl. Eventually I'd prefer all commands to be
1708 specified with lists.
1710 * buildbot/slave/commands.py (LogFileWatcher): handle logfiles
1711 which are deleted (or not yet created) correctly. Also add
1712 failsafe code to not explode if the file-watching poller doesn't
1713 get started. Thanks to JP Calderone for the catch and the poller
1715 * buildbot/test/test_shell.py (SlaveSide._testLogFiles): add test
1717 * buildbot/test/emitlogs.py: same
1719 * NEWS: summarize recent changes
1721 * docs/buildbot.texinfo (Debug options): suggest an .ssh/options
1722 clause to avoid the "host key mismatch" warning
1724 * buildbot/process/step_twisted.py (Trial.start): if the
1725 buildslave is too old to understand logfiles=, fall back to
1726 running 'cat _trial_temp/test.log' like before.
1727 (Trial.commandComplete): same. this takes advantage of the
1728 LoggingBuildStep refactoring to stall commandComplete long enough
1729 to run a second RemoteShellCommand.
1731 * buildbot/process/step.py (LoggingBuildStep.startCommand):
1732 refactor command-completion handling, to allow methods like
1733 commandComplete/createSummary/evaluateCommand to return Deferreds.
1734 (LoggingBuildStep._commandComplete): delete the refactored method
1735 (ShellCommand.setupLogfiles): if the buildslave is too old to
1736 understand logfiles=, put a warning message both into twistd.log
1737 and into the otherwise empty user-visible LogFiles.
1739 * buildbot/process/step.py (LoggedRemoteCommand.useLog): allow
1740 callers to provide the slave-side logfile name, rather than
1741 forcing it to come from the local name of the LogFile.
1742 (BuildStep.getSlaveName): new method
1744 * buildbot/process/base.py (Build.getSlaveName): new method, so
1745 steps can find out which buildslave they're running on
1747 * buildbot/test/test_steps.py (Version.checkCompare): oops, update
1748 to match the s/cvs_ver/command_version/ change
1750 2006-08-05 Brian Warner <warner@lothar.com>
1752 * buildbot/slave/commands.py (command_version): replace the CVS
1753 auto-updated cvs_ver keyword with a manually-updated variable,
1754 since CVS is no longer the master repository. Add a description of
1755 the remote API change starting in this version (2.1), specifically
1756 the fact that SlaveShellCommand now accepts 'initial_stdin',
1757 'keep_stdin_open', and 'logfiles'.
1759 2006-07-31 Brian Warner <warner@lothar.com>
1761 * docs/buildbot.texinfo (System Architecture): Finally add lots of
1762 diagrams to describe how the whole system fits together. The
1763 images themselves are kept in SVG files, with ascii-art versions
1764 in corresponding .txt files. Texinfo knows how to interpolate the
1765 text version into .info files, reference the .png versions from
1766 .html files, and include .eps versions in the .ps format.
1767 * docs/images/Makefile: tools to create .png and .eps
1768 * docs/images/*.svg: created pictures with Inkscape.
1769 * .darcs-boring: ignore the generated .eps and .png files
1771 2006-07-24 Brian Warner <warner@lothar.com>
1773 * buildbot/master.py (BuildMaster.loadConfig): check for duplicate
1774 Scheduler names, since they cause setServiceParent to explode
1776 * buildbot/test/test_config.py (ConfigTest._testSchedulers_7): test it
1778 2006-07-20 Brian Warner <warner@lothar.com>
1780 * buildbot/scripts/sample.cfg: simplify the sample BuildFactory,
1781 which runs the buildbot unit tests
1783 * docs/buildbot.texinfo (Index of Useful Classes): add a table of
1784 classes that are useful in master.cfg
1786 2006-07-15 Brian Warner <warner@lothar.com>
1788 * Makefile (some-apidocs): new target to build only some epydocs
1790 * setup.py: minor comment.. does the classifiers= argument prevent
1791 the setup.py script from working on python2.2/2.3?
1793 * buildbot/scripts/sample.cfg: update manhole example, arrange into
1796 * buildbot/twcompat.py: fix minor typo in comments
1798 * buildbot/manhole.py: move all Manhole-related code out to this
1799 module. Implement SSH-based manholes (with TwistedConch), and move
1800 to conch's nifty line-editing syntax-coloring REPL shell instead
1801 of the boring non-editing monochromatic (and deprecated) old
1803 * buildbot/master.py: remove all Manhole-related code
1804 (BuildMaster.loadConfig._add): make sure the old manhole is
1805 removed before we add the new one
1806 * docs/buildbot.texinfo (Debug options): document new Manhole options
1808 * buildbot/twcompat.py (_which): fix some epydoc issues
1809 * buildbot/status/html.py (Waterfall.__init__): same
1811 2006-06-29 Brian Warner <warner@lothar.com>
1813 * buildbot/interfaces.py: get Interface from b.twcompat to hush
1814 deprecation warnings under newer Twisteds (by using
1815 zope.interface.Interface instead of old twisted.python.components
1817 * buildbot/slave/interfaces.py: same
1819 2006-06-28 Brian Warner <warner@lothar.com>
1821 * buildbot/slave/commands.py (SVN): add --non-interactive to all
1822 svn commands, so it will fail immediately instead of hanging while
1823 it waits for a username/password to be typed in.
1825 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): add minor
1826 log message if the step was shut down
1828 * buildbot/scripts/runner.py (SlaveOptions.longdesc): remove
1829 obsolete reference to mktap.
1831 2006-06-20 Brian Warner <warner@lothar.com>
1833 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): update
1834 test to include new 'logfiles' argument sent from master to slave
1836 2006-06-19 Brian Warner <warner@lothar.com>
1838 * buildbot/process/step_twisted.py (Trial): track Progress from
1839 _trial_temp/test.log too
1841 * buildbot/process/step.py (OutputProgressObserver): generalize
1842 the earlier StdioProgressObserver into an OutputProgressObserver
1843 that can track LogFiles other than stdio.
1844 (LoggingBuildStep.__init__): same
1846 * buildbot/process/step_twisted.py (Trial): use logfiles= to track
1847 _trial_temp/test.log, not a separate 'cat' command. TODO: this
1848 will fail under windows because of os.sep issues. It might have
1849 worked before if 'cat' was doing cygwin path conversion.
1851 * buildbot/slave/commands.py (LogFileWatcher.__init__): note the
1852 creation of LogFileWatchers
1853 (ShellCommand._startCommand): and record the files that were
1854 watched in the 'headers' section of the ShellCommand output
1856 * buildbot/process/step.py (RemoteShellCommand.__init__): duh, you
1857 need to actually pass it to the slave if you want it to work.
1858 (ShellCommand): document it a bit
1860 * buildbot/test/test_shell.py: new test to validate LogFiles
1861 * buildbot/test/runutils.py (SlaveCommandTestBase): updates to
1863 * buildbot/test/emitlogs.py: enhance to wait for a line on stdin
1864 before printing the last batch of lines, to test that the polling
1865 logic is working properly
1867 * buildbot/process/step.py (LoggedRemoteCommand): improve LogFile
1868 handling, making it possible to track multiple logs for a single
1869 RemoteCommand. The previous single logfile is now known as the
1871 (LoggedRemoteCommand.remoteUpdate): accept key='log' updates
1872 (RemoteShellCommand.__init__): accept logfiles=
1873 (LoggingBuildStep.startCommand): stdio_log is now one of many
1874 (ShellCommand): added logfiles= argument, as well as a class-level
1875 .logfiles attribute, which will be merged together to figure out
1876 which logfiles should be tracked. The latter maybe be useful for
1877 subclasses of ShellCommand which know they will aways produce
1878 secondary logfiles in the same location.
1880 * buildbot/slave/commands.py (ShellCommandPP): add writeStdin()
1881 and closeStdin() methods, preparing to make it possible to write
1882 to a ShellCommand's stdin at any time, not just at startup. These
1883 writes are buffered if the child process hasn't started yet.
1884 (LogFileWatcher): new helper class to watch arbitrary logfiles
1885 while a ShellCommand runs. This class polls the file every two
1886 seconds, and sends back 10k chunks to the buildmaster.
1887 (ShellCommand): rename stdin= to initialStdin=, and add
1888 keepStdinOpen= and logfiles= to arguments. Set up LogFileWatchers
1890 (ShellCommand.addLogfile): LogFile text is sent in updates with a
1891 key of "log" and a value of (logname, data).
1892 (SlaveShellCommand): add 'initial_stdin', 'keep_stdin_open', and
1893 'logfiles' to the master-visible args dictionary.
1894 (SourceBase.doPatch): match s/stdin/initialStdin/ change
1897 * buildbot/test/test_vc.py (Patch.testPatch): same
1900 * buildbot/test/emit.py: write to a logfile in the current
1901 directory. We use this to figure out what was used as a basedir
1902 rather than looking to see which copy of emit.py gets run, so that
1903 we can run the commands from inside _trial_temp rather than inside
1905 * buildbot/test/subdir/emit.py: same
1906 * buildbot/test/runutils.py (FakeSlaveBuilder): take a 'basedir'
1907 argument rather than running from buildbot/test/
1908 (SlaveCommandTestBase.setUpBuilder): explicitly set up the Builder
1909 rather than using an implicit setUp()
1910 * buildbot/test/test_slavecommand.py (ShellBase.setUp): same
1911 (ShellBase.testShell1, etc): use explicit path to emit.py instead
1912 of assuming that we're running in buildbot/test/ (and that '.' is
1915 * buildbot/slave/commands.py (Command.doStart): refactor Command
1916 startup/completion a bit: now the SlaveBuilder calls doStart(),
1917 which is not meant for overridding by subclasses, and doStart()
1918 calls start(), which is. Likewise the SlaveBuilder calls
1919 doInterrupt(), and subclasses override interrupt(). This also puts
1920 responsibility for maintaining .running in Command rather than in
1922 (Command.doInterrupt): same
1923 (Command.commandComplete): same, this is called when the deferred
1924 returned by start() completes.
1925 * buildbot/slave/bot.py (SlaveBuilder.remote_startCommand): same
1926 (SlaveBuilder.remote_interruptCommand): same
1927 (SlaveBuilder.stopCommand): same
1929 2006-06-16 Brian Warner <warner@lothar.com>
1931 * buildbot/test/test_shell.py: new test file to contain everything
1932 relating to ShellCommand
1933 (SlaveSide.testLogFiles): (todo) test for the upcoming "watch
1934 multiple logfiles in realtime" feature, not yet implemented
1935 * buildbot/test/emitlogs.py: support file for testLogFiles
1936 * docs/buildbot.texinfo (ShellCommand): document the feature
1938 * buildbot/test/test_steps.py (BuildStep.setUp): rmtree refactoring
1940 * buildbot/test/runutils.py (SlaveCommandTestBase): utility class
1941 for tests which exercise SlaveCommands in isolation.
1943 * buildbot/test/test_slavecommand.py: Move some utilities like
1944 SignalMixin and FakeSlaveBuilder from here ..
1945 * buildbot/test/runutils.py: .. to here, so they can be used by
1946 other test classes too
1947 * buildbot/test/test_vc.py: more SignalMixin refactoring
1948 * buildbot/test/test_control.py: same
1949 * buildbot/test/test_run.py: and some rmtree refactoring
1951 2006-06-15 Brian Warner <warner@lothar.com>
1953 * buildbot/test/test_vc.py (P4.testCheckoutBranch): rename from
1954 'testBranch' to match other VC tests and have the tests run in
1955 roughly increasing order of dependency
1957 * buildbot/test/test_steps.py (LogObserver): new test to verify
1958 LogObservers can be created at various times and still get
1959 connected up properly
1961 * buildbot/test/runutils.py (setupBuildStepStatus): utility method
1962 to create BuildStepStatus instances that actually work.
1964 * buildbot/process/step.py (LogObserver): add outReceived and
1965 errReceived base methods, to be overridden
1967 * buildbot/status/builder.py (BuildStatus.addStepWithName): change
1968 API to take a name instead of a step, reducing the coupling
1969 somewhat. This returns the BuildStepStatus object so it can be
1970 passed to the new Step, instead of jamming it directly into the
1972 * buildbot/process/step.py (BuildStep.setStepStatus): add a setter
1974 * buildbot/process/base.py (Build.setupBuild): use both methods
1975 * buildbot/test/test_web.py (Logfile.setUp): rearrange the setup
1976 process a bit to match
1978 2006-06-14 Brian Warner <warner@lothar.com>
1980 * docs/buildbot.texinfo (Adding LogObservers): add some limited
1981 docs on writing new LogObserver classes
1982 (Writing New Status Plugins): brief docs on how Status Plugins fit
1985 * buildbot/process/step_twisted.py (TrialTestCaseCounter):
1986 implement a LogObserver that counts how many unit tests have been
1988 (Trial.__init__): wire it in
1989 * buildbot/test/test_twisted.py (Counter): unit test for it
1991 * buildbot/process/step_twisted.py (HLint.commandComplete): update
1992 to new cmd.logs['stdio'] scheme
1993 (Trial.commandComplete): same
1994 (BuildDebs.commandComplete): same
1996 * buildbot/process/step.py (LoggedRemoteCommand): use a dict of
1997 LogFiles, instead of just a single one. The old single logfile is
1998 now called "stdio". LoggedRemoteCommand no longer creates a
1999 LogFile for you (the code to do that was broken anyway). If you
2000 don't create a "stdio" LogFile, then stdout/stderr will be
2002 (LogObserver): implement "LogObservers", which a BuildStep can add
2003 to parse the output of a command in real-time. The primary use is
2004 to provide more useful information to the Progress code, allowing
2005 better ETA estimates.
2006 (LogLineObserver): utility subclass which feeds complete lines to
2007 the parser instead of bytes.
2008 (BuildStep.progressMetrics): this is safer as a tuple
2009 (BuildStep.setProgress): utility method, meant to be called by
2011 (BuildStep.addLogObserver): new method, to be called at any time
2012 during the BuildStep (even before any LogFiles have been created),
2013 to attach (or schedule for eventual attachment) a LogObserver to a
2015 (StdioProgressObserver): new LogObserver which replaces the old
2016 "output" progress gatherer
2017 (LoggingBuildStep.__init__): same
2018 (LoggingBuildStep.startCommand): set up the "stdio" LogFile
2019 (LoggingBuildStep._commandComplete): must use logs['stdio']
2020 instead of the old single ".log" attribute.
2021 * buildbot/status/builder.py (LogFile): remove old logProgressTo
2022 functionality, now subsumed into StdioProgressObserver
2023 * buildbot/test/test_status.py (Subscription._testSlave_2): the
2024 log name changed from "output" to "stdio".
2027 * buildbot/interfaces.py (ILogFile): add the Interface used from
2028 the BuildStep towards the LogFile
2029 (ILogObserver): and the one provided by a LogObserver
2030 * buildbot/status/builder.py (LogFile): implement it
2032 * buildbot/interfaces.py (LOG_CHANNEL_*): move STDOUT / STDERR /
2033 HEADER constants here ..
2034 * buildbot/status/builder.py (STDOUT): .. from here
2036 2006-06-13 Brian Warner <warner@lothar.com>
2038 * buildbot/test/test_p4poller.py (TestP4Poller.failUnlessIn): fix
2039 compatibility with python2.2, which doesn't have the 'substr in
2041 (TestP4Poller.makeTime): utility function to construct the
2042 timestamp using the same strptime() approach as p4poller does. It
2043 turns out that time.mktime() behaves slightly differently under
2044 python2.2, probably something to do with the DST flag, and that
2045 causes the test to fail under python2.2. (changing the mktime()
2046 arguments to have dst=0 instead of -1 caused it to fail under
2047 python2.3. Go figure.)
2048 (TestP4Poller._testCheck3): use our makeTime() instead of mktime()
2050 2006-06-12 Brian Warner <warner@lothar.com>
2052 * buildbot/process/step.py (P4): merge in patch SF#1473939, adding
2053 proper Perforce (P4) support. Many many thanks to Scott Lamb for
2054 contributing such an excellent patch, including docs and unit
2055 tests! This makes it *so* much easier to apply. I had to update
2056 test_vc.py to handle some recent refactorings, but everything else
2057 applied smoothly. The only remaining thing I'd like to fix would
2058 be to remove the hard-wired port 1666 used by p4d, and allow it to
2059 claim any unused port. This would allow two copies of the test
2060 suite to run on the same host at the same time, as well as
2061 allowing the test suite to run while a real (production) p4d was
2062 running on the same host. Oh, and maybe we should add a warning to
2063 step.P4 that gets emitted if the slave is too old to provide the
2064 'p4' SlaveCommand. Otherwise it looks great. (closes: SF#1473939).
2065 * buildbot/slave/commands.py (P4): same
2066 (P4Sync): same, some minor updates
2067 * buildbot/changes/p4poller.py: same
2068 * docs/buildbot.texinfo: same
2069 * buildbot/test/test_p4poller.py: same
2070 * buildbot/test/test_vc.py (P4): same
2072 * setup.py: add Trove classifiers for PyPI
2074 2006-06-08 Brian Warner <warner@allmydata.com>
2076 * buildbot/status/client.py
2077 (RemoteBuilder.remote_getCurrentBuilds): oops, I screwed up when
2078 changing this from getCurrentBuild() to getCurrentBuilds(). Each
2079 build needs to be IRemote'd separately, rather than IRemote'ing
2080 the whole list at once. I can't wait until newpb's serialization
2081 adapters make this unnecessary.
2083 2006-06-06 Brian Warner <warner@lothar.com>
2085 * buildbot/process/step.py (WithProperties): make this inherit
2086 from ComparableMixin, so that reloading an unchanged config file
2087 doesn't cause us to spuriously reload any Builders which use them.
2088 * buildbot/test/test_config.py (ConfigTest.testWithProperties):
2091 2006-06-03 Brian Warner <warner@lothar.com>
2093 * contrib/windows/{setup.py, buildbot_service.py}: add support for
2094 running py2exe on windows, contributed by Mark Hammond. Addresses
2095 SF#1401121, but I think we still need to include
2096 buildbot/scripts/sample.cfg
2097 * setup.py: include buildbot_service.py as a script under windows
2098 * buildbot/status/html.py: when sys.frozen (i.e. we're running in
2099 a py2exe application), get the icon/css datafiles from a different
2102 * buildbot/status/mail.py (MailNotifier.buildMessage): don't
2103 double-escape the build URL. Thanks to Olivier Bonnet for the
2104 patch. Fixes SF#1452801.
2106 2006-06-02 Brian Warner <warner@lothar.com>
2108 * contrib/svn_buildbot.py (ChangeSender.getChanges): ignore the
2109 first six columns of 'svnlook' output, not just the first column,
2110 since property changes appear in the other five. Thanks to Olivier
2111 Bonnet for the patch. Fixes SF#1398174.
2113 2006-06-01 Brian Warner <warner@lothar.com>
2115 * buildbot/test/test_web.py (Logfile.setUp): set the .reason on
2116 the fake build, so that title= has something to be set to
2118 * buildbot/status/html.py (BuildBox.getBox): set the 'title='
2119 attribute of the "Build #NN" link in the yellow start-the-build
2120 box to the build's reason. This means that you get a little
2121 tooltip explaining why the build was done when you hover over the
2122 yellow box. Thanks to Zandr Milewski for the suggestion.
2124 * buildbot/clients/gtkPanes.py (Box.setColor): ignore color=None
2125 (Box.setETA): handle ETA=None (by stopping the timer)
2126 (Box.update): make the [soon] text less different than the usual
2127 text, so the rest of the text doesn't flop around so much. It
2128 would be awfully nice to figure out how to center this stuff.
2129 (ThreeRowBuilder.stepETAUpdate): more debugging printouts
2131 * buildbot/process/step.py (ShellCommand): set flunkOnFailure=True
2132 by default, so that any ShellCommand which fails marks the overall
2133 build as a failure. I should have done this from the beginning.
2134 Add flunkOnFailure=False to the arguments if you want to turn off
2137 2006-05-30 Brian Warner <warner@lothar.com>
2139 * buildbot/clients/gtkPanes.py: add a third row: now it shows
2140 last-build/current-build/current-step. Show what step is currently
2141 running. Show ETA for both the overall build and the current step.
2142 Update GTK calls to modern non-deprecated forms. There's still a
2143 lot of dead code and debug noise to remove.
2145 * buildbot/process/step_twisted.py (Trial): set the step name, so it
2146 shows up properly in status displays
2148 2006-05-28 Brian Warner <warner@lothar.com>
2150 * buildbot/test/test_properties.py (Run.testInterpolate): on the
2151 build we use to verify that WithProperties works:
2153 ** set flunkOnFailure=True so that build failures get noticed
2154 ** set workdir='.' so that the build succeeds, otherwise it is trying
2155 to touch 'build/something', and 'build/' doesn't exist because
2156 usually that's created by a Source step
2157 ** set timeout=10, because Twisted-1.3.0 has a race condition that
2158 this test somehow triggers, in which the 'touch' process becomes
2159 a zombie and we wait for th etimeout before giving up on it.
2161 * buildbot/test/runutils.py (RunMixin.logBuildResults): utility method
2162 to log the Build results and step logs to the twisted log.
2163 (RunMixin.failUnlessBuildSucceeded): use logBuildResults to record
2164 what went wrong if a build was expected to succeed but didn't.
2166 * buildbot/process/step_twisted.py (Trial): set the default
2167 trialMode to '--reporter=bwverbose', which specifies verbose
2168 black-and-white text. Back in twisted-1.3/2.0 days we had to use
2169 '-to', but those are completely missing in modern Twisteds.
2171 * buildbot/scripts/sample.cfg: make the sample Manhole config use
2172 a localhost-only port, to encourage better security
2174 * docs/buildbot.texinfo (Change Sources): mention
2177 * .darcs-boring: add a Darcs boringfile
2179 * README (REQUIREMENTS): stop claiming compatibility with
2182 * contrib/darcs_buildbot.py: write a darcs-commit-hook change
2185 2006-05-27 Brian Warner <warner@lothar.com>
2187 * buildbot/__init__.py: bump to 0.7.3+ while between releases
2188 * docs/buildbot.texinfo: same
2190 2006-05-23 Brian Warner <warner@lothar.com>
2192 * buildbot/__init__.py (version): Releasing buildbot-0.7.3
2193 * docs/buildbot.texinfo: set version to match
2194 * NEWS: update for 0.7.3
2196 * docs/buildbot.texinfo (Change Sources): mention hg_buildbot.py,
2197 give a quick mapping from VC system to possible ChangeSources
2198 (Build Properties): add 'buildername'
2200 * buildbot/process/base.py (Build.setupStatus): oops, set
2201 'buildername' and 'buildnumber' properties
2202 * buildbot/test/test_properties.py (Interpolate.testBuildNumber):
2205 2006-05-22 Brian Warner <warner@lothar.com>
2207 * docs/buildbot.texinfo (Build Properties): explain the syntax of
2208 property interpolation better
2210 * README (INSTALLATION): remove old '-v' argument from recommended
2213 * docs/buildbot.texinfo (ShellCommand): add docs for description=
2214 and descriptionDone= arguments. Thanks to Niklaus Giger for the
2217 * buildbot/slave/commands.py (SVN.parseGotRevision._parse): use
2218 'svnversion' instead of grepping the output of 'svn info', much
2219 simpler and avoids CR/LF problems on windows. Thanks to Olivier
2220 Bonnet for the suggestion.
2221 (SVN.parseGotRevision): oops, older verisons of 'svnversion'
2222 require the WC_PATH argument, so run 'svnversion .' instead.
2224 * buildbot/interfaces.py (IChangeSource): methods in Interfaces
2225 aren't supposed to have 'self' in their argument list
2227 2006-05-21 Brian Warner <warner@lothar.com>
2229 * buildbot/process/step.py (ShellCommand.start): make
2230 testInterpolate pass. I was passing the uninterpolated command to
2231 the RemoteShellCommand constructor
2232 (ShellCommand._interpolateProperties): oops, handle non-list
2233 commands (i.e. strings with multiple words separated by spaces in
2234 them) properly, instead of forgetting about them.
2236 * buildbot/test/test_properties.py (Run.testInterpolate): new test
2237 to actually try to use build properties in a real build. This test
2239 * buildbot/test/runutils.py (RunMixin.requestBuild): utility methods
2240 to start and evaluate builds
2242 * buildbot/test/test__versions.py: add a pseudo-test to record
2243 what version of Twisted/Python/Buildbot are running. This should
2244 show up at the beginning of _trial_tmp/test.log, and exists to help
2245 debug other problems.
2247 * buildbot/status/html.py (Waterfall): add 'robots_txt=' argument,
2248 a filename to be served as 'robots.txt' to discourage web spiders.
2249 Adapted from a patch by Tobi Vollebregt, thanks!
2250 * buildbot/test/test_web.py (Waterfall._test_waterfall_5): test it
2251 (Waterfall.test_waterfall): tweak the way that filenames are put
2252 into the config file, to accomodate windows pathnames better.
2254 * docs/buildbot.texinfo (HTML Waterfall): document it
2256 * buildbot/process/process_twisted.py
2257 (QuickTwistedBuildFactory.__init__): recent versions of Twisted
2258 changed the build process. The new setup.py no longer takes the
2260 (FullTwistedBuildFactory.__init__): same
2261 (TwistedReactorsBuildFactory.__init__): same
2263 * contrib/hg_buildbot.py: wrote a commit script for mercurial, to
2264 be placed in the [hooks] section of the central repository (the
2265 one that everybody pushes changes to).
2267 2006-05-20 Brian Warner <warner@lothar.com>
2269 * buildbot/slave/commands.py (Darcs.doVCFull): when writing the
2270 .darcs-context file, use binary mode. I think this was causing a
2271 Darcs failure under windows.
2273 2006-05-19 Brian Warner <warner@lothar.com>
2275 * buildbot/scripts/tryclient.py (CVSExtractor.getBaseRevision):
2276 use a timezone string of +0000 and gmtime, since this timestamp is
2277 sent to a buildmaster and %z is broken.
2279 * buildbot/test/test_vc.py (CVSHelper.getdate): use no timezone
2280 string and localtime, since this timestamp will only be consumed
2281 locally, and %z is broken.
2283 * buildbot/slave/commands.py (CVS.parseGotRevision): use +0000 and
2284 gmtime, since this timestamp is returned to the buildmaster, and
2287 2006-05-18 Brian Warner <warner@lothar.com>
2289 * NEWS: update in preparation for next release
2291 * buildbot/test/test_vc.py (VCS_Helper): factor out all the
2292 setup-repository and do-we-have-the-vc-tools code into a separate
2293 "helper" class, which sticks around in a single module-level
2294 object. This seems more likely to continue to work in the future
2295 than having it hide in the TestCase and hope that TestCases stick
2296 around for a long time.
2298 * buildbot/test/test_vc.py (MercurialSupport.vc_create): 'hg
2299 addremove' has been deprecated in recent versions of mercurial, so
2300 use 'hg add' instead
2302 2006-05-07 Brian Warner <warner@lothar.com>
2304 * buildbot/scheduler.py (Try_Jobdir.messageReceived): when
2305 operating under windows, move the file before opening it, since
2306 you can't rename a file that somebody has open.
2308 * buildbot/process/base.py (Build.setupBuild): if something goes
2309 wrong while creating a Step, log the name and arguments, since the
2310 error message when you get the number of arguments wrong is really
2313 2006-05-06 Brian Warner <warner@lothar.com>
2315 * buildbot/process/step_twisted.py (Trial.setupEnvironment): more
2316 bugs in twisted-specific code not covered by my unit tests, this
2317 time use 'cmd' argument instead of self.cmd
2319 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
2320 fix stupid braino: either use startwith or find()==0, not both.
2321 (TwistedReactorsBuildFactory.__init__): another dumb typo
2323 * buildbot/test/test_slavecommand.py (ShellBase.testInterrupt1):
2324 mark this test as TODO under windows, since process-killing seems
2325 dodgy there. We'll come back to this later and try to fix it
2328 * buildbot/test/test_vc.py (CVSSupport.getdate): use localtime,
2329 and don't include a timezone
2330 (CVSSupport.vc_try_checkout): stop trying to strip the timezone.
2331 This should avoid the windows-with-verbose-timezone-name problem
2333 (Patch.testPatch): add a test which runs 'patch' with less
2334 overhead than the full VCBase.do_patch sequence, to try to isolate
2335 a windows test failure. This one uses slave.commands.ShellCommand
2336 and 'patch', but none of the VC code.
2338 * buildbot/slave/commands.py (getCommand): use which() to find the
2339 executables for 'cvs', 'svn', etc. This ought to help under
2342 * buildbot/test/test_vc.py (VCBase.do_getpatch): Delete the
2343 working directory before starting. If an earlier test failed, the
2344 leftover directory would mistakenly flunk a later test.
2345 (ArchCommon.registerRepository): fix some tla-vs-baz problems.
2346 Make sure that we use the right commandlines if which("tla") picks
2347 up "tla.exe" (as it does under windows).
2348 (TlaSupport.do_get): factor out this tla-vs-baz difference
2349 (TlaSupport.vc_create): more tla-vs-baz differences
2351 * buildbot/test/test_slavecommand.py
2352 (ShellBase.testShellMissingCommand): stop trying to assert
2353 anything about the error message: different shells on different
2354 OSes with different languages makes it hard, and it really isn't
2355 that interesting of a thing to test anyway.
2357 * buildbot/test/test_vc.py (CVSSupport.capable): skip CVS tests if
2358 we detect cvs-1.10 (which is the version shipped with OS-X 10.3
2359 "Panther"), because it has a bug which flunks a couple tests in
2360 weird ways. I've checked that cvs-1.12.9 (as shipped with debian)
2361 is ok. OS-X 10.4 "Tiger" ships with cvs-1.11, but I haven't been
2362 able to test that yet.
2364 2006-04-30 Brian Warner <warner@lothar.com>
2366 * buildbot/test/test_vc.py (VCBase.runCommand): set $LC_ALL="C" to
2367 make sure child commands emit messages in english, so our regexps
2368 will match. Thanks to Nikaus Giger for identifying the problems.
2369 (VCBase._do_vctest_export_1): mode="export" is not responsible
2370 for setting the "got_revision" property, since in many cases it is
2371 not convenient to determine.
2372 (SVNSupport.capable): when running 'svn --version' to check for
2373 ra_local, we want error messages in english
2374 * buildbot/test/test_slavecommand.py
2375 (ShellBase.testShellMissingCommand): set $LC_ALL="C" to get bash
2376 to emit the error message in english
2378 * buildbot/slave/commands.py (SourceBase.setup): stash a copy of
2379 the environment with $LC_ALL="C" so that Commands which need to
2380 parse the output of their child processes can obtain it in
2382 (SVN.parseGotRevision): call "svn info" afterwards instead of
2383 watching the output of the "svn update" or "svn checkout".
2384 (Darcs.parseGotRevision): use $LC_ALL="C" when running the command
2385 (Arch.parseGotRevision): same
2386 (Bazaar.parseGotRevision): same
2387 (Mercurial.parseGotRevision): same
2389 * buildbot/scripts/tryclient.py (SourceStampExtractor.dovc): set
2390 $LC_ALL="C" when running commands under 'buildbot try', too
2392 * buildbot/test/__init__.py: remove the global os.environ()
2393 setting, instead we do it just for the tests that run commands and
2394 need to parse their output.
2396 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir):
2397 remove the overly-short .timeout on this test, because non-DNotify
2398 platforms must fall back to polling which happens at 10 second
2399 intervals, so a 5 second timeout would never succeed.
2401 2006-04-24 Brian Warner <warner@lothar.com>
2403 * docs/buildbot.texinfo (Installing the code): update trial
2404 invocation, SF#1469116 by Niklaus Giger.
2405 (Attributes of Changes): updated branch-name examples to be
2406 a bit more realistic, SF#1475240 by Stephen Davis.
2408 * contrib/windows/buildbot2.bat: utility wrapper for windows
2409 developers, contributed by Nick Trout (after a year of neglect..
2410 sorry!). SF#1194231.
2412 * buildbot/test/test_vc.py (*.capable): store the actual VC
2413 binary's pathname in VCS[vcname], so it can be retrieved later
2414 (CVSSupport.vc_try_checkout): incorporate Niklaus Giger's patch to
2415 strip out non-numeric timezone information, specifically the funky
2416 German string that his system produced that confuses CVS.
2417 (DarcsSupport.vc_create): use dovc() instead of vc(), this should
2418 allow Darcs tests to work on windows
2419 * buildbot/scripts/tryclient.py (SourceStampExtractor): use
2420 procutils.which() everywhere, to allow tryclient to work under
2421 windows. Also from Niklaus Giger, SF#1463394.
2423 * buildbot/twcompat.py (which): move the replacement for a missing
2424 twisted.python.procutils.which from test_vc.py to here, so it can
2425 be used in other places too (specifically tryclient.py)
2427 2006-04-23 Brian Warner <warner@lothar.com>
2429 * buildbot/status/html.py (StatusResourceBuild.body): replace the
2430 bare buildbotURL/projectName line with a proper DIV, along with a
2431 CSS class of "title", from Stefan Seefeld (SF#1461675).
2432 (WaterfallStatusResource.body0): remove the redundant 'table'
2433 class from the table
2434 (WaterfallStatusResource.body): same. Also add class="LastBuild"
2435 to the top-row TR, and class="Activity" to the second-row TR,
2436 rather than putting them in the individual TD nodes.
2438 * buildbot/test/test_vc.py (VCBase.checkGotRevision): test
2439 'got_revision' build property for all VC systems that implement
2440 accurate ones: SVN, Darcs, Arch, Bazaar, Mercurial.
2442 * buildbot/slave/commands.py (SourceBase._handleGotRevision): try
2443 to determine which revision we actually obtained
2444 (CVS.parseGotRevision): implement this for CVS, which just means
2445 to grab a timestamp. Not ideal, and it depends upon the buildslave
2446 having a clock that is reasonably well syncronized with the server,
2447 but it's better than nothing.
2448 (SVN.parseGotRevision): implement it for SVN, which is accurate
2449 (Darcs.parseGotRevision): same
2450 (Arch.parseGotRevision): same
2451 (Bazaar.parseGotRevision): same
2452 (Mercurial.parseGotRevision): same
2454 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate):
2455 keep a record of all non-stdout/stderr/header/rc status updates,
2456 for the benefit of RemoteCommands that send other useful things,
2458 (Source.commandComplete): put any 'got_revision' status values
2459 into a build property of the same name
2462 * buildbot/process/step_twisted.py (Trial): update to deal with
2463 new ShellCommand refactoring
2465 * docs/buildbot.texinfo (Build Properties): document new feature
2466 that allows BuildSteps to get/set Build-wide properties like which
2467 revision was requested and/or checked out.
2469 * buildbot/interfaces.py (IBuildStatus.getProperty): new method
2470 * buildbot/status/builder.py (BuildStatus.getProperty): implement
2471 it. Note that this bumps the persistenceVersion of the saved Build
2472 object, so add the necessary upgrade-old-version logic to include
2473 an empty properties dict.
2475 * buildbot/process/base.py (Build.setProperty): implement it
2476 (Build.getProperty): same
2477 (Build.startBuild): change build startup to set 'branch',
2478 'revision', and 'slavename' properties at the right time
2480 * buildbot/process/step.py (BuildStep.__init__): change setup to
2481 require 'build' argument in a better way
2482 (LoggingBuildStep): split ShellCommand into two pieces, for better
2483 subclassing elsewhere. LoggingBuildStep is a BuildStep which runs
2484 a single RemoteCommand that sends stdout/stderr status text. It
2485 also provides the usual commandComplete / createSummary /
2486 evaluateCommand / getText methods to be overridden...
2487 (ShellCommand): .. whereas ShellCommand is specifically for
2488 running RemoteShellCommands. Other shell-like BuildSteps (like
2489 Source) can inherit from LoggingBuildStep instead of ShellCommand
2490 (WithProperties): marker class to do build-property interpolation
2491 (Source): inherit from LoggingBuildStep instead of ShellCommand
2494 * buildbot/test/test_properties.py: test new functionality
2496 2006-04-21 Brian Warner <warner@lothar.com>
2498 * buildbot/test/test_vc.py: rename testBranch to
2499 testCheckoutBranch to keep the tests in about the right
2502 2006-04-18 Brian Warner <warner@lothar.com>
2504 * docs/buildbot.texinfo (PBListener): improve cross-references
2505 between PBListener and 'buildbot statusgui', thanks to John Pye
2508 2006-04-17 Brian Warner <warner@lothar.com>
2510 * buildbot/twcompat.py (maybeWait): handle SkipTest properly when
2511 running under Twisted-1.3.0, otherwise skipped tests are reported
2514 * all: use isinstance() instead of 'type(x) is foo', suggested by
2517 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
2518 oops, fix a brain-fade from the other week, when making the
2519 addStep changes. I changed all the __init__ upcalls to use the
2520 wrong superclass name.
2521 (FullTwistedBuildFactory.__init__): same
2522 (TwistedDebsBuildFactory.__init__): same
2523 (TwistedReactorsBuildFactory.__init__): same
2524 (TwistedBuild.isFileImportant): use .startswith for clarity,
2525 thanks to Neal Norwitz for the suggestions.
2527 * contrib/viewcvspoll.py: script to poll a viewcvs database for
2528 changes, then deliver them over PB to a remote buildmaster.
2530 * contrib/svnpoller.py: added script by John Pye to poll a remote
2531 SVN repository (by running 'svn log') from a cronjob, and run
2532 'buildbot sendchange' to deliver the changes to a remote
2534 * contrib/svn_watcher.py: added script by Niklaus Giger (a
2535 modification of svnpoller.py), same purpose, but this one loops
2536 internally (rather than expecting to run from a cronjob) and works
2538 * contrib/README.txt: same
2540 2006-04-11 Brian Warner <warner@lothar.com>
2542 * all: fix a number of incorrect names and missing imports, thanks
2543 to Anthony Baxter for the patch.
2544 * buildbot/status/html.py (WaterfallStatusResource.statusToHTML):
2545 remove unused buggy method.
2546 * buildbot/status/builder.py (BuildStatus.saveYourself): rmtree
2547 comes from shutil, not "shutils"
2548 * buildbot/process/step.py (TreeSize.evaluateCommand): fix bad name
2549 (Arch.checkSlaveVersion): same
2550 * buildbot/process/step_twisted.py (Trial.commandComplete): same, in
2552 * buildbot/process/step_twisted2.py: add some missing imports
2553 * buildbot/twcompat.py (_deferGenerator): fix cut-and-paste error,
2554 this code used to live in twisted.internet.defer
2556 2006-04-10 Brian Warner <warner@lothar.com>
2558 * buildbot/process/step.py (Mercurial): add Mercurial support
2559 * buildbot/slave/commands.py (Mercurial): same
2560 * buildbot/scripts/tryclient.py (MercurialExtractor): same
2561 * buildbot/test/test_vc.py (Mercurial): same, checkout over HTTP is
2562 not yet tested, but 'try' support *is* covered
2563 * docs/buildbot.texinfo (Mercurial): document it
2565 * buildbot/process/step.py (LoggedRemoteCommand.remoteUpdate): add
2566 some debugging messages (turned off)
2567 * buildbot/test/test_vc.py: improve debug messages
2569 2006-04-07 Brian Warner <warner@lothar.com>
2571 * buildbot/test/test_vc.py (which): define our own which() in case
2572 we can't import twisted.python.procutils, because procutils doesn't
2573 exist in Twisted-1.3
2575 * docs/buildbot.texinfo (Interlocks): fix some typos, mention use
2576 of SlaveLocks for performance tests
2578 * docs/examples/twisted_master.cfg: update to match current usage
2580 * buildbot/changes/p4poller.py (P4Source): add new arguments:
2581 password, p4 binary, pollinterval, maximum history to check.
2582 Patch from an anonymous sf.net contributor, SF#1219384.
2583 * buildbot/process/step.py (P4Sync.__init__): add username,
2584 password, and client arguments.
2585 * buildbot/slave/commands.py (P4Sync): same
2587 2006-04-05 Brian Warner <warner@lothar.com>
2589 * buildbot/process/factory.py (BuildFactory.addStep): new method
2590 to add steps to a BuildFactory. Use it instead of f.steps.append,
2591 and you can probably avoid using the s() convenience function.
2592 Patch from Neal Norwitz, sf.net #1412605.
2593 (other): update all factories to use addStep
2594 * buildbot/process/process_twisted.py: update all factories to use
2597 2006-04-03 Brian Warner <warner@lothar.com>
2599 * buildbot/test/test_vc.py: modified find-the-VC-command logic to
2600 work under windows too. Adapted from a patch by Niklaus Giger,
2601 addresses SF#1463399.
2603 * buildbot/test/__init__.py: set $LANG to 'C', to insure that
2604 spawned commands emit parseable results in english and not some
2605 other language. Patch from Niklaus Giger, SF#1463395.
2607 * README (INSTALLATION): discourage users from running unit tests on
2608 a "network drive", patch from Niklaus Giger, SF#1463394.
2610 2006-03-22 Brian Warner <warner@lothar.com>
2612 * contrib/svn_buildbot.py: rearrange, add an easy-to-change
2613 function to turn a repository-relative pathname into a (branch,
2614 branch-relative-filename) tuple. Change this function to handle
2615 the branch naming policy used by your Subversion repository.
2616 Thanks to AllMyData.com for sponsoring this work.
2618 2006-03-16 Brian Warner <warner@lothar.com>
2620 * buildbot/scripts/sample.cfg: add python-mode declaration for
2621 vim. Thanks to John Pye for the patch.
2623 * docs/buildbot.texinfo (Launching the daemons): fix @reboot job
2624 command line, mention the importance of running 'crontab' as the
2625 buildmaster/buildslave user. Thanks to John Pye for the catch.
2627 2006-03-13 Brian Warner <warner@lothar.com>
2629 * buildbot/status/words.py (IRC): add an optional password=
2630 argument, which will be sent to Nickserv in an IDENTIFY message at
2631 login, to claim the nickname. freenode requires this before the
2632 bot can sent (or reply to) private messages. Thanks to Clement
2633 Stenac for the patch.
2634 * docs/buildbot.texinfo (IRC Bot): document it
2636 * buildbot/status/builder.py (LogFile.merge): don't write chunks
2637 larger than chunkSize. Fixes SF#1349253.
2638 * buildbot/test/test_status.py (Log.testLargeSummary): test it
2639 (Log.testConsumer): update to match new internal chunking behavior
2641 2006-03-12 Brian Warner <warner@lothar.com>
2643 * buildbot/test/test_vc.py: remove the last use of waitForDeferred
2645 * buildbot/test/test_maildir.py (MaildirTest): rename the
2646 'timeout' method, as it collides with trial's internals
2648 * buildbot/scripts/runner.py: add 'buildbot restart' command
2649 (stop): don't sys.exit() out of here, otherwise restart can't work
2650 * docs/buildbot.texinfo (Shutdown): document it
2652 * buildbot/buildset.py (BuildSet.__init__): clean up docstring
2653 * buildbot/status/html.py (Waterfall.__init__): same
2654 * buildbot/process/builder.py (Builder.startBuild): same
2655 * buildbot/process/base.py (BuildRequest): same
2656 * buildbot/sourcestamp.py (SourceStamp): same
2657 * buildbot/scheduler.py (Nightly): same
2659 * buildbot/__init__.py (version): bump to 0.7.2+ while between
2661 * docs/buildbot.texinfo: same
2663 2006-02-17 Brian Warner <warner@lothar.com>
2665 * buildbot/__init__.py (version): Releasing buildbot-0.7.2
2666 * docs/buildbot.texinfo: set version number to match
2667 * NEWS: update for 0.7.2
2669 2006-02-16 Brian Warner <warner@lothar.com>
2671 * docs/buildbot.texinfo (Build Dependencies): add cindex tag
2673 2006-02-09 Brian Warner <warner@lothar.com>
2675 * docs/buildbot.texinfo (How Different VC Systems Specify Sources):
2676 add text to explain per-build branch parameters
2677 * NEWS: mention --umask
2679 2006-02-08 Brian Warner <warner@lothar.com>
2681 * buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
2683 (SlaveOptions.optParameters): add --umask, to make it possible to
2684 make buildslave-generated files (including build products) be
2687 * buildbot/slave/bot.py (BuildSlave.startService): same
2689 2006-01-23 Brian Warner <warner@lothar.com>
2691 * buildbot/status/builder.py: urllib.quote() all URLs that include
2692 Builder names, so that builders can include characters like '/'
2693 and ' ' without completely breaking the resulting HTML. Thanks to
2694 Kevin Turner for the patch.
2695 * buildbot/status/html.py: same
2696 * buildbot/test/test_web.py (GetURL.testBuild): match changes
2698 * NEWS: update in preparation for upcoming release
2700 2006-01-18 Brian Warner <warner@lothar.com>
2702 * docs/examples/twisted_master.cfg: update to match the Twisted
2703 buildbot: remove python2.2, switch to exarkun's buildslaves,
2704 disable the .deb builder until we figure out how to build twisted
2705 .debs from SVN, add some ktrace debugging to the OS-X build
2706 process and remove the qt build, remove threadless builders,
2707 change freebsd builder to use landonf's buildslave.
2709 2006-01-12 Brian Warner <warner@lothar.com>
2711 * buildbot/master.py (Manhole.__init__): let port= be a strports
2712 specification string, but handle a regular int for backwards
2713 compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
2714 used in master.cfg to limit connections to just the local host.
2715 (BuildMaster.loadConfig): same for c['slavePortnum']
2716 * buildbot/scheduler.py (Try_Userpass.__init__): same
2717 * buildbot/status/client.py (PBListener.__init__): same
2718 * buildbot/status/html.py (Waterfall.__init__): same, for both
2719 http_port and distrib_port. Include backwards-compatibility checks
2720 so distrib_port can be a filename string and still mean unix:/foo
2721 * docs/buildbot.texinfo (Setting the slaveport): document it
2722 (Debug options): same
2723 (HTML Waterfall): same
2726 * buildbot/test/test_config.py (ConfigTest): test it
2728 * buildbot/master.py (BuildMaster.loadConfig): wait for the
2729 slaveport's disownServiceParent deferred to fire before opening
2730 the new one. Fixes an annoying bug in the unit tests.
2732 2006-01-03 Brian Warner <warner@lothar.com>
2734 * buildbot/master.py (BuildMaster): remove the .schedulers
2735 attribute, replacing it with an allSchedulers() method that looks
2736 for all IService children that implement IScheduler. Having only
2737 one parent/child relationship means fewer opportunities for bugs.
2738 (BuildMaster.allSchedulers): new method
2739 (BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
2740 also fix ugly bug that caused any config-file reload to
2741 half-forget about the earlier Schedulers, causing an exception
2742 when a Change arrived and was handed to a half-connected
2743 Scheduler. The exception was in scheduler.py line 54ish:
2744 self.parent.submitBuildSet(bs)
2745 exceptions.AttributeError: 'NoneType' object has no attribute
2747 (BuildMaster.addChange): update to use allSchedulers()
2749 * buildbot/scheduler.py (BaseScheduler.__implements__): fix this
2750 to work properly with twisted-1.3.0, where you must explicitly
2751 include the __implements__ from parent classes
2752 (BaseScheduler.__repr__): make it easier to distinguish distinct
2754 (BaseUpstreamScheduler.__implements__): same
2756 * buildbot/status/builder.py (Status.getSchedulers): update to
2758 * buildbot/test/test_run.py (Run.testMaster): same
2759 * buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
2760 * buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
2761 make sure Scheduler instances are left alone when an identical
2762 config file is reloaded
2763 (ConfigElements.testSchedulers): make sure Schedulers are properly
2766 * Makefile (TRIALARGS): my local default Twisted version is now
2767 2.1.0, update the trial arguments accordingly
2769 2005-12-22 Brian Warner <warner@lothar.com>
2771 * docs/examples/twisted_master.cfg: merge changes from pyr: add
2774 * buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
2775 addChange in the parent class, although I suspect this should be
2776 fixed better in the future.
2778 2005-11-26 Brian Warner <warner@lothar.com>
2780 * buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
2781 explode when branch==None, thanks to Kevin Turner for the catch
2782 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
2785 * buildbot/__init__.py (version): bump to 0.7.1+ while between
2787 * docs/buildbot.texinfo: same
2789 2005-11-26 Brian Warner <warner@lothar.com>
2791 * buildbot/__init__.py (version): Releasing buildbot-0.7.1
2792 * docs/buildbot.texinfo: set version number to match
2794 2005-11-26 Brian Warner <warner@lothar.com>
2796 * NEWS: update for 0.7.1
2798 * buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
2799 sure that unsubscribe works even if we never sent an ETA update.
2800 Also, don't explode on duplicate unsubscribe.
2801 (BuildStepStatus.addLog): make the convenience "return self"-added
2802 watcher automatically unsubscribe when the Step finishes.
2803 (BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
2804 (BuildStatus.stepStarted): same auto-unsubscribe
2805 (BuilderStatus.buildStarted): same auto-unsubscribe
2807 * buildbot/interfaces.py (IStatusReceiver.buildStarted): document
2809 (IStatusReceiver.stepStarted): same
2810 (IStatusReceiver.logStarted): same
2812 * buildbot/test/test_run.py (Status): move the Status test..
2813 * buildbot/test/test_status.py (Subscription): .. to here
2815 2005-11-25 Brian Warner <warner@lothar.com>
2817 * NEWS: more updates
2819 * buildbot/locks.py: fix the problem in which loading a master.cfg
2820 file that changes some Builders (but not all of them) can result
2821 in having multiple copies of the same Lock. Now, the real Locks
2822 are kept in a table inside the BotMaster, and the Builders/Steps
2823 use "LockIDs", which are still instances of MasterLock and
2824 SlaveLock. The real Locks are instances of the new RealMasterLock
2825 and RealSlaveLock classes.
2826 * buildbot/master.py (BotMaster.getLockByID): new method to
2827 convert LockIDs into real Locks.
2828 * buildbot/process/base.py (Build.startBuild): convert LockIDs
2829 into real Locks before building
2830 * buildbot/process/step.py (BuildStep.startStep): same
2831 * buildbot/test/test_locks.py (Locks.testLock1a): add a test which
2832 exercises the problem
2835 * docs/buildbot.texinfo (Scheduler Types): give a few hints about
2836 what Schedulers are available
2838 * buildbot/scheduler.py (Nightly): add new Scheduler based upon
2839 work by Dobes Vandermeer and hacked mercilessly by me. This offers
2840 'cron'-style build scheduling at certain times of day, week,
2842 * buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
2844 * buildbot/scheduler.py (Scheduler): change fileIsImportant
2845 handling: treat self.fileIsImportant more as an attribute that
2846 contains a callable than as a method. If the attribute is None,
2847 don't call it and assume all filenames are important. It is still
2848 possible to provide a fileIsImportant method in a subclass,
2850 (AnyBranchScheduler): handle fileIsImportant=None, previously it
2852 * buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
2853 test using AnyBranchScheduler with fileIsImportant=None
2855 2005-11-24 Brian Warner <warner@lothar.com>
2857 * buildbot/test/test_config.py (StartService): don't claim a fixed
2858 port number, instead set slavePort=0 on the first pass, figure out
2859 what port was allocated, then switch to a config file that uses
2862 * buildbot/master.py (BuildMaster.loadConfig): close the old
2863 slaveport before opening the new one, because unit tests might
2864 replace slavePort=0 with the same allocated portnumber, and if we
2865 don't wait for the old port to close first, we get a "port already
2866 in use" error. There is a tiny race condition here, but the only
2867 threat is from other programs that bind (statically) to the same
2868 port number we happened to be allocated, and only if those
2869 programs use SO_REUSEADDR, and only if they get control in between
2872 * Makefile (TRIALARGS): update to handle Twisted > 2.1.0
2874 * buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
2875 deleted ChangeSources before adding any new ones
2876 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
2877 compare_attrs, to make sure that a config-file reload does not
2878 unnecessarily replace an unmodified ChangeSource instance
2879 * buildbot/test/test_config.py (ConfigTest.testSources): update
2881 * buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
2882 mean "don't build anything", and add a warning if it gets used
2883 because it isn't actually useful.
2885 * contrib/svn_buildbot.py: update example usage to match the port
2886 number that gets used by the PBChangeSource
2887 * buildbot/scripts/sample.cfg: add example of PBChangeSource
2889 2005-11-22 Brian Warner <warner@lothar.com>
2891 * NEWS: start collecting items for next release
2893 * buildbot/process/step.py (SVN.computeSourceRevision): assume
2894 revisions are strings
2895 (P4Sync.computeSourceRevision): same
2897 * buildbot/status/html.py (StatusResourceBuild.body): add a link
2898 to the Buildbot's overall status page
2899 (StatusResourceBuilder.body): same
2901 2005-11-15 Brian Warner <warner@lothar.com>
2903 * buildbot/master.py (BuildMaster.loadConfig): serialize the
2904 config-file loading, specifically to make sure old StatusTargets
2905 are finished shutting down before new ones start up (thus
2906 resolving a bug in which changing the Waterfall object would fail
2907 because both new and old instances were claiming the same
2908 listening port). Also load new Schedulers after all the new
2909 Builders are set up, in case they fire off a new build right away.
2910 * buildbot/test/test_config.py (StartService): test it
2912 * buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
2913 the branch name to the mail body
2915 * buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
2916 Without it, a config-file reload fails to update an existing
2918 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
2919 username/passwd to compare_attrs, for the same reason
2920 * buildbot/status/html.py (Waterfall): add favicon to
2921 compare_attrs, same reason
2923 2005-11-05 Brian Warner <warner@lothar.com>
2925 * buildbot/scripts/tryclient.py (createJobfile): stringify the
2926 baserev before stuffing it in the jobfile. This resolves problems
2927 under SVN (and probably Arch) where revisions are expressed as
2928 numbers. I'm inclined to use string-based revisions everywhere in
2929 the future, but this fix should be safe for now. Thanks to Steven
2930 Walter for the patch.
2932 * buildbot/changes/changes.py (ChangeMaster.saveYourself): use
2933 binary mode when opening pickle files, to make windows work
2934 better. Thanks to Dobes Vandermeer for the catch.
2935 * buildbot/status/builder.py (BuildStatus.saveYourself): same
2936 (BuilderStatus.getBuildByNumber): same
2937 (Status.builderAdded): same
2938 * buildbot/master.py (BuildMaster.loadChanges): same
2940 * buildbot/util.py (Swappable): delete unused leftover code
2942 * buildbot/process/step.py (SVN): when building on a non-default
2943 branch, add the word "[branch]" to the VC step's description, so
2944 it is obvious that we're not building the usual stuff. Likewise,
2945 when we are building a specific revision, add the text "rNNN" to
2946 indicate what that revision number is. Thanks to Brad Hards and
2947 Nathaniel Smith for the suggestion.
2948 (Darcs.startVC): same
2949 (Arch.startVC): same
2950 (Bazaar.startVC): same
2952 * buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
2953 typo, caught by Mark Dillavou, closes SF#1216636.
2955 * buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
2956 about a test to add some day
2958 * docs/examples/twisted_master.cfg: update: bot1 can now handle
2959 the 'full-2.3' build, and the 'reactors' build is now run under
2960 python-2.4 because the buildslave no longer has gtk/etc bindings
2961 for earlier versions.
2963 2005-11-03 Brian Warner <warner@lothar.com>
2965 * buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
2966 method, takes an IBuildStatus and rebuilds it. It might make more
2967 sense to add this to IBuildControl instead, but that instance goes
2968 away completely once the build has finished, and resubmitting
2969 builds can take place weeks later.
2970 * buildbot/process/builder.py (BuilderControl.resubmitBuild): same
2971 * buildbot/status/html.py (StatusResourceBuild): also stash an
2972 IBuilderControl so we can use resubmitBuild.
2973 (StatusResourceBuild.body): render "resubmit" button if we can.
2974 Also add hrefs for each BuildStep
2975 (StatusResourceBuild.rebuild): add action for "resubmit" button
2976 (StatusResourceBuilder.getChild): give it an IBuilderControl
2978 * buildbot/status/builder.py (Status.getURLForThing): change the
2979 URL for BuildSteps to have a "step-" prefix, so the magic URLs
2980 that live as targets of buttons like "stop" and "rebuild" can't
2982 * buildbot/status/builder.py (Status.getURLForThing): same
2983 * buildbot/status/html.py (StatusResourceBuild.getChild): same
2984 (StepBox.getBox): same
2985 * buildbot/test/test_web.py (GetURL): same
2988 * buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
2989 exclusivity checks after Source.__init__ upcall, so misspelled
2990 arguments will be reported more usefully
2991 (Darcs.__init__): same
2993 2005-10-29 Brian Warner <warner@lothar.com>
2995 * docs/examples/twisted_master.cfg: don't double-fire the 'quick'
2996 builder. Move the Try scheduler off to a separate port.
2998 2005-10-27 Brian Warner <warner@lothar.com>
3000 * buildbot/clients/gtkPanes.py
3001 (TwoRowClient.remote_builderRemoved): disappearing Builders used
3002 to cause the app to crash, now they don't.
3004 * buildbot/clients/debug.py: display the buildmaster's location
3005 in the window's title bar
3007 2005-10-26 Brian Warner <warner@lothar.com>
3009 * buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
3010 in case they have spaces or whatnot. Patch from Dobes Vandermeer.
3011 * buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
3013 * buildbot/status/html.py (td): put a single non-breaking space
3014 inside otherwise empty <td> elements, as a workaround for buggy
3015 browsers which would optimize them away (along with any associated
3016 styles, like the kind that create the waterfall grid borders).
3017 Patch from Frerich Raabe.
3019 * buildbot/process/step_twisted.py (Trial): expose the trialMode=
3020 argv-list as an argument, defaulting to ["-to"], which is
3021 appropriate for the Trial that comes with Twisted-2.1.0 and
3022 earlier. The Trial in current Twisted SVN wants
3023 ["--reporter=bwverbose"] instead. Also expose trialArgs=, which
3024 defaults to an empty list.
3025 * buildbot/process/process_twisted.py (TwistedTrial.trialMode):
3026 match it, now that trialMode= is a list instead of a single string
3028 * buildbot/__init__.py (version): bump to 0.7.0+ while between
3030 * docs/buildbot.texinfo: same
3032 2005-10-24 Brian Warner <warner@lothar.com>
3034 * buildbot/__init__.py (version): Releasing buildbot-0.7.0
3035 * docs/buildbot.texinfo: set version number to match
3037 2005-10-24 Brian Warner <warner@lothar.com>
3039 * README: update for 0.7.0
3041 * docs/buildbot.texinfo: move the freshcvs stuff out of the README
3043 * buildbot/clients/debug.glade: add 'branch' box to fake-commit
3044 * buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
3045 send the branch= argument unless the user really provided one, to
3046 retain compatibility with older buildmasters that don't accept
3048 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
3051 * docs/buildbot.texinfo: update lots of stuff
3053 * buildbot/scripts/runner.py (sendchange): add a --branch argument
3054 to the 'buildbot sendchange' command
3055 * buildbot/clients/sendchange.py (Sender.send): same
3056 * buildbot/changes/pb.py (ChangePerspective): same
3057 * buildbot/test/test_changes.py (Sender.testSender): test it
3059 * buildbot/process/step.py (SVN.__init__): change 'base_url' and
3060 'default_branch' argument names to 'baseURL' and 'defaultBranch',
3061 for consistency with other BuildStep arguments that use camelCase.
3062 Well, at least more of them use camelCase (like flunkOnWarnings)
3063 than don't.. I wish I'd picked one style and stuck with it
3064 earlier. Annoying, but it's best done before the release, since
3065 these arguments didn't exist at all in 0.6.6 .
3067 * buildbot/test/test_vc.py (SVN.testCheckout): same
3068 (Darcs.testPatch): same
3069 * docs/buildbot.texinfo (SVN): document the change
3070 (Darcs): same, add some build-on-branch docs
3071 * docs/examples/twisted_master.cfg: match change
3073 * buildbot/process/step.py (BuildStep): rename
3074 slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
3075 how it is normally used.
3076 * buildbot/test/test_steps.py (Version.checkCompare): same
3078 * buildbot/process/step.py (CVS.startVC): refuse to build
3079 update/copy -style builds on a non-default branch with an old
3080 buildslave (<=0.6.6) that doesn't know how to do it properly. The
3081 concern is that it will do a VC 'update' in an existing tree when
3082 it is supposed to be switching branches (and therefore clobbering
3083 the tree to do a full checkout), thus building the wrong source.
3084 This used to be a warning, but I think the confusion it is likely
3085 to cause warrants making it an error.
3086 (SVN.startVC): same, also make mode=export on old slaves an error
3087 (Darcs.startVC): same
3088 (Git.startVC): improve error message for non-Git-enabled slaves
3089 (Arch.checkSlaveVersion): same. continue to emit a warning when a
3090 specific revision is built on a slave that doesn't pay attention
3091 to args['revision'], because for slowly-changing trees it will
3092 probably do the right thing, and because we have no way to tell
3093 whether we're asking it to build the most recent version or not.
3094 * buildbot/interfaces.py (BuildSlaveTooOldError): new exception
3096 * buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
3097 that 'master' is in host:portnum format, to catch errors sooner
3099 2005-10-23 Brian Warner <warner@lothar.com>
3101 * buildbot/process/step_twisted.py (ProcessDocs.createSummary):
3102 when creating the list of warning messages, include the line
3103 immediately after each WARNING: line, since that's usually where
3104 the file and line number wind up.
3106 * docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
3111 2005-10-22 Brian Warner <warner@lothar.com>
3113 * buildbot/status/html.py (HtmlResource): incorporate valid-HTML
3114 patch from Brad Hards
3115 * buildbot/status/classic.css: same
3116 * buildbot/test/test_web.py (Waterfall): match changes
3118 * buildbot/test/test_steps.py (BuildStep.setUp): set
3119 nextBuildNumber so the test passes
3120 * buildbot/test/test_status.py (MyBuilder): same
3122 * buildbot/status/html.py (StatusResourceBuild.body): revision
3123 might be numeric, so stringify it before html-escapifying it
3124 (CurrentBox.getBox): add a "waiting" state, and show a countdown
3125 timer for the upcoming build
3126 * buildbot/status/classic.css: add background-color attributes for
3127 offline/waiting/building classes
3129 * buildbot/status/builder.py (BuildStatus): derive from
3130 styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
3131 the default (i.e. unknown) .slavename to "???" instead of None,
3132 since even unknown slavenames need to be printed eventually.
3133 (BuilderStatus): also derive from styles.Versioned . More
3134 importantly, determine .nextBuildNumber at creation/unpickling
3135 time by scanning the directory of saved BuildStatus instances and
3136 choosing one larger than the highest-numbered one found. This
3137 should fix the problem where random errors during upgrades cause
3138 the buildbot to forget about earlier builds. .nextBuildNumber is
3139 no longer stored in the pickle.
3140 (Status.builderAdded): if we can't unpickle the BuilderStatus,
3141 at least log the error. Also call Builder.determineNextBuildNumber
3142 once the basedir is set.
3144 * buildbot/master.py (BuildMaster.loadChanges): do
3145 styles.doUpgrade afterwards, in case I decide to make Changes
3146 derived from styles.Versioned some day and forget to make this
3150 * buildbot/test/test_runner.py (Options.testForceOptions): skip
3151 when running under older pythons (<2.3) in which the shlex module
3152 doesn't have a 'split' function.
3154 * buildbot/process/step.py (ShellCommand.start): make
3155 errorMessages= be a list of strings to stuff in the log before the
3156 command actually starts. This makes it easier to flag multiple
3157 warning messages, e.g. when the Source steps have to deal with an
3159 (CVS.startVC): handle slaves that don't handle multiple branches
3160 by switching into 'clobber' mode
3161 (SVN.startVC): same. Also reject branches without base_url
3162 (Darcs.startVC): same. Also reject revision= in older slaves
3163 (Arch.checkSlaveVersion): same (just the multiple-branches stuff)
3164 (Bazaar.startVC): same, and test for baz separately than for arch
3166 * buildbot/slave/commands.py (cvs_ver): document new features
3168 * buildbot/process/step.py (BuildStep.slaveVersion): document it
3169 (BuildStep.slaveVersionNewEnough): more useful utility method
3170 * buildbot/test/test_steps.py (Version): start testing it
3172 * buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
3173 the 'force' command requires python2.3, for the shlex.split method
3175 * docs/examples/twisted_master.cfg: remove old freshcvs stuff,
3176 since we don't use it anymore. The Twisted buildbot uses a
3179 2005-10-21 Brian Warner <warner@lothar.com>
3181 * buildbot/process/process_twisted.py: rework all BuildFactory
3182 classes to take a 'source' step as an argument, instead of
3183 building up the SVN instance in the factory.
3184 * docs/examples/twisted_master.cfg: enable build-on-branch by
3185 providing a base_url and default_branch
3187 * buildbot/status/words.py (IrcStatusBot.command_FORCE): add
3188 control over --branch and --revision, not that they are always
3190 * buildbot/status/html.py (StatusResourceBuilder.force): same
3191 (StatusResourceBuild.body): display SourceStamp components
3193 * buildbot/scripts/runner.py (ForceOptions): option parser for the
3194 IRC 'force' command, so it can be shared with an eventual
3195 command-line-tool 'buildbot force' mode.
3196 * buildbot/test/test_runner.py (Options.testForceOptions): test it
3198 2005-10-20 Brian Warner <warner@lothar.com>
3200 * buildbot/status/mail.py (MailNotifier.buildMessage): reformat
3202 * docs/examples/twisted_master.cfg: update to use Schedulers
3204 * buildbot/scripts/sample.cfg: update with Schedulers
3206 * buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
3207 method specifically for use by HTML "force build" button and the
3208 IRC "force" command. Raises an immediate error if there are no
3210 (IBuilderControl.requestBuild): make this just submit a build, not
3211 try to check for existing slaves or set up any when-finished
3212 Deferreds or anything.
3213 * buildbot/process/builder.py (BuilderControl): same
3214 * buildbot/status/html.py (StatusResourceBuilder.force): same
3215 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
3216 * buildbot/test/test_slaves.py: same
3217 * buildbot/test/test_web.py: same
3219 2005-10-19 Brian Warner <warner@lothar.com>
3221 * docs/examples/twisted_master.cfg: re-sync with reality: bring
3222 back python2.2 tests, turn off OS-X threadedselect-reactor tests
3224 2005-10-18 Brian Warner <warner@lothar.com>
3226 * buildbot/status/html.py: provide 'status' argument to most
3227 StatusResourceFOO objects
3228 (StatusResourceBuild.body): href-ify the Builder name, add "Steps
3229 and Logfiles" section to make the Build page into a more-or-less
3230 comprehensive source of status information about the build
3232 * buildbot/status/mail.py (MailNotifier): include the Build's URL
3233 * buildbot/status/words.py (IrcStatusBot.buildFinished): same
3235 2005-10-17 Brian Warner <warner@lothar.com>
3237 * buildbot/process/process_twisted.py (TwistedTrial): update Trial
3238 arguments to accomodate Twisted >=2.1.0 . I will have to figure
3239 out what to do about other projects: the correct options for
3240 recent Twisteds will not work for older ones.
3242 2005-10-15 Brian Warner <warner@lothar.com>
3244 * buildbot/status/builder.py (Status.getURLForThing): add method
3245 to provide a URL for arbitrary IStatusFoo objects. The idea is to
3246 use this in email/IRC status clients to make them more useful, by
3247 providing the end user with hints on where to learn more about the
3248 object being reported on.
3249 * buildbot/test/test_web.py (GetURL): tests for it
3251 2005-10-14 Brian Warner <warner@lothar.com>
3253 * buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
3254 fix bug resulting from deferredResult changes
3256 2005-10-13 Brian Warner <warner@lothar.com>
3258 * buildbot/test/test_changes.py: remove use of deferredResult
3259 * buildbot/test/test_config.py: same
3260 * buildbot/test/test_control.py: same
3261 * buildbot/test/test_status.py: same
3262 * buildbot/test/test_vc.py: this is the only remaining use, since
3263 it gets used at module level. This needs to be replaced by some
3264 sort of class-level run-once routine.
3266 * buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
3268 * lots: implement multiple slaves per Builder, which means multiple
3269 current builds per Builder. Some highlights:
3270 * buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
3271 of (state,currentBuilds) instead of (state,currentBuild)
3272 (IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
3273 (IBuildStatus.getSlavename): new method, so you can tell which
3274 slave got used. This only gets set when the build completes.
3275 (IBuildRequestStatus.getBuilds): new method
3277 * buildbot/process/builder.py (SlaveBuilder): add a .state
3278 attribute to track things like ATTACHING and IDLE and BUILDING,
3280 (Builder): .. the .slaves attribute here, which has been turned
3281 into a simple list of available slaves. Added a separate
3282 attaching_slaves list to track ones that are not yet ready for
3284 (Builder.fireTestEvent): put off the test-event callback for a
3285 reactor turn, to make tests a bit more consistent.
3286 (Ping): cleaned up the slaveping a bit, now it disconnects if the
3287 ping fails due to an exception. This needs work, I'm worried that
3288 a code error could lead to a constantly re-connecting slave.
3289 Especially since I'm trying to move to a distinct remote_ping
3290 method, separate from the remote_print that we currently use.
3291 (BuilderControl.requestBuild): return a convenience Deferred that
3292 provides an IBuildStatus when the build finishes.
3293 (BuilderControl.ping): ping all connected slaves, only return True
3294 if they all respond.
3296 * buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
3297 reconnect when we shut down.
3299 * buildbot/status/builder.py: implement new methods, convert
3300 one-build-at-a-time methods to handle multiple builds
3301 * buildbot/status/*.py: do the same in all default status targets
3302 * buildbot/status/html.py: report the build's slavename in the
3303 per-Build page, report all buildslaves on the per-Builder page
3305 * buildbot/test/test_run.py: update/create tests
3306 * buildbot/test/test_slaves.py: same
3307 * buildbot/test/test_scheduler.py: remove stale test
3309 * docs/buildbot.texinfo: document the new builder-specification
3310 'slavenames' parameter
3312 2005-10-12 Brian Warner <warner@lothar.com>
3314 * buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
3315 report failure correctly, causing Dependent builds to run when
3316 they shouldn't have.
3317 * buildbot/status/builder.py (BuildSetStatus): same
3318 * buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
3319 (Set.testSuccess): test the both-pass case too
3320 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
3321 fix this test: it was ending too early, masking the failure before
3322 (Logger): specialized StatusReceiver to make sure the dependent
3323 builds aren't even started, much less completed.
3325 2005-10-07 Brian Warner <warner@lothar.com>
3327 * buildbot/slave/bot.py (SlaveBuilder.activity): survive
3328 bot.SlaveBuilder being disowned in the middle of a build
3330 * buildbot/status/base.py (StatusReceiverMultiService): oops, make
3331 this inherit from StatusReceiver. Also upcall in __init__. This
3332 fixes the embarrasing crash when the new buildSetSubmitted method
3333 is invoked and Waterfall/etc don't implement their own.
3334 * buildbot/test/test_run.py: add a TODO note about a test to catch
3335 just this sort of thing.
3337 * buildbot/process/builder.py (Builder.attached): remove the
3338 already-attached warning, this situation is normal. Add some
3339 comments explaining it.
3341 2005-10-02 Brian Warner <warner@lothar.com>
3343 * buildbot/changes/maildir.py (Maildir.start): Tolerate
3344 OverflowError when setting up dnotify, because some 64-bit systems
3345 have problems with signed-vs-unsigned constants and trip up on the
3346 DN_MULTISHOT flag. Patch from Brad Hards.
3348 2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
3350 * buildbot/process/step.py (BuildStep, ShellCommand): Add
3351 progressMetrics, description, descriptionDone to the 'parms' list,
3352 and make use the 'parms' list from the implementation class
3353 instead of only BuildStep to initialize the parameters. This
3354 allows buildbot.process.factory.s() to initialize all the parms,
3355 not just those defined in directly by BuildStep.
3357 2005-09-03 Brian Warner <warner@lothar.com>
3359 * NEWS: start adding items for the next release
3361 * docs/examples/twisted_master.cfg: (sync with reality) turn off
3362 python2.2 tests, change 'Quick' builder to only use python2.3
3364 2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
3366 * buildbot/status/html.py (StatusResourceBuilder.body): only show
3367 the "Ping Builder" button if the build control is available; the
3368 user sees an exception otherwise
3370 * docs/buildbot.texinfo (PBChangeSource): fix a typo
3372 2005-09-01 Brian Warner <warner@lothar.com>
3374 * buildbot/interfaces.py (IBuilderStatus.getState): update
3375 signature, point out that 'build' can be None
3376 (IBuildStatus.getETA): point out ETA can be none
3378 * buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
3380 * buildbot/status/words.py (IrcStatusBot.emit_status): same
3382 2005-08-31 Brian Warner <warner@lothar.com>
3384 * buildbot/status/base.py (StatusReceiver.builderChangedState):
3385 update to match correct signature: removed 'eta' argument
3386 * buildbot/status/mail.py (MailNotifier.builderChangedState): same
3388 2005-08-30 Brian Warner <warner@lothar.com>
3390 * buildbot/status/builder.py (LogFile): remove the assertion that
3391 blows up when you try to overwrite an existing logfile, instead
3392 just emit a warning. This case gets hit when the buildmaster is
3393 killed and doesn't get a chance to write out the serialized
3394 BuilderStatus object, so the .nextBuildNumber attribute gets out
3397 * buildbot/scripts/runner.py (sendchange): add --revision_file to
3398 the 'buildbot sendchange' arguments, for the Darcs context file
3399 * docs/buildbot.texinfo (sendchange): document it
3401 * buildbot/status/html.py: add pending/upcoming builds to CurrentBox
3402 * buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
3403 (IStatus.getSchedulers): new method
3404 * buildbot/status/builder.py (BuilderStatus): track pendingBuilds
3405 (Status.getSchedulers): implement
3406 * buildbot/process/builder.py (Builder): maintain
3407 BuilderStatus.pendingBuilds
3408 * buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
3409 (TryBase.addChange): Try schedulers should ignore Changes
3411 * buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
3412 for 'try' on CVS/SVN
3413 * buildbot/test/test_runner.py (Try.testGetTopdir): test case
3415 * buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
3416 report status properly.
3417 (Try.createJob): implement unique buildset IDs
3419 * buildbot/status/client.py (StatusClientPerspective): add a
3420 perspective_getBuildSets method for the benefit of jobdir-style
3422 * docs/buildbot.texinfo (try): more docs
3423 * buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
3426 2005-08-18 Brian Warner <warner@lothar.com>
3428 * buildbot/scripts/tryclient.py (Try): make 'try' status reporting
3429 actually work. It's functional but still kind of clunky. Also, it
3430 only works with the pb-style.. needs to be made to work with the
3433 * buildbot/status/client.py (RemoteBuildSet): new class
3434 (RemoteBuildRequest): same
3435 (RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
3436 object, not the internal BuildStatus object.
3437 (RemoteBuild.remote_subscribe): new method to subscribe to builds
3438 outside of the usual buildStarted() return value.
3439 (BuildSubscriber): support class for RemoteBuild.remote_subscribe
3441 * buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
3442 (Try_Userpass_Perspective.perspective_try): return a remotely
3443 usable BuildSetStatus object
3445 * buildbot/interfaces.py (IBuildStatus): remove obsolete
3446 isStarted()/waitUntilStarted()
3448 2005-08-16 Brian Warner <warner@lothar.com>
3450 * buildbot/status/builder.py: implement IBuildSetStatus and
3451 IBuildRequestStatus, wire them into place.
3452 * buildbot/buildset.py: same. Add ID, move wait-until-finished
3453 methods into the BuildSetStatus object.
3454 * buildbot/interfaces.py: same
3455 (IStatus.getBuildSets): new method to get pending BuildSets
3456 (IStatusReceiver.buildsetSubmitted): new method which hears about
3458 * buildbot/master.py (BuildMaster.submitBuildSet): same
3459 * buildbot/process/base.py (BuildRequest): same, replace
3460 waitUntilStarted with subscribe/unsubscribe
3461 * buildbot/process/builder.py (BuilderControl.forceBuild): use
3462 subscribe instead of waitUntilStarted
3463 * buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
3465 * buildbot/status/client.py (StatusClientPerspective.builderRemoved):
3467 * buildbot/test/test_buildreq.py: update for new code
3468 * buildbot/test/test_control.py (Force.testRequest): same
3471 * buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
3472 for Darcs to not use the tempfile module, so it works under
3473 python-2.2 too. We really didn't need the full cleverness of that
3474 module, since the slave has exclusive control of its own builddir.
3476 2005-08-15 Brian Warner <warner@lothar.com>
3478 * buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
3479 for CVS trees. It doesn't work for non-trunk branches,
3481 * buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
3484 * Makefile: make it easier to test against python2.2
3486 * buildbot/test/test_vc.py (VCBase.tearDown): provide for
3487 tearDown2, so things like Arch can unregister archives as they're
3488 shutting down. The previous subclass-override-tearDown technique
3489 resulted in a nested maybeWait() and test failures under
3492 * buildbot/scripts/tryclient.py (getSourceStamp): extract branches
3493 where we can (Arch), add a branch= argument to set the branch used
3495 (BazExtractor): extract the branch too
3496 (TlaExtractor): same
3497 * buildbot/scripts/runner.py (TryOptions): add --branch
3498 * docs/buildbot.texinfo (try): document --branch/try_branch
3500 * buildbot/slave/commands.py (Darcs): implement get-revision for
3501 Darcs, so that 'try' will work. This requires the tempfile module
3504 * buildbot/test/test_vc.py: rewrite tests, getting better coverage
3505 of revisions, branches, and 'try' in the process.
3507 2005-08-11 Brian Warner <warner@lothar.com>
3509 * buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
3510 this, it got broken at some point in the last few releases
3511 * buildbot/status/words.py (IrcBuildRequest): reply was broken
3512 (IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
3513 specifically the removal of ETA information from the tuple
3515 * buildbot/locks.py: use %d for id() instead of %x, avoid a silly
3518 * docs/buildbot.texinfo (try): document both --builder and
3519 'try_builders' in .buildbot/options
3520 * buildbot/scripts/runner.py (TryOptions): add --builder,
3521 accumulate the values into opts['builders']
3522 * buildbot/scripts/tryclient.py (Try.__init__): set builders
3523 * buildbot/test/test_runner.py (Try): add some quick tests to make
3524 sure 'buildbot try --options' and .buildbot/options get parsed
3525 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
3526 use --builder control
3528 * docs/buildbot.texinfo (try): add --port argument to PB style
3530 * buildbot/scripts/tryclient.py (SourceStampExtractor): return an
3531 actual SourceStamp. Still need to extract a branch name, somehow.
3532 (Try): finish implementing the try client side, still need a UI
3533 for specifying which builders to use
3534 (Try.getopt): factor our options/config-file reading
3535 * buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
3537 * buildbot/test/test_vc.py: match SourceStampExtractor change
3539 * buildbot/scripts/runner.py (Options.opt_verbose): --verbose
3540 causes the twisted log to be sent to stderr
3542 * buildbot/scheduler.py (Try_Userpass): implement the PB style
3544 2005-08-10 Brian Warner <warner@lothar.com>
3546 * buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
3547 style is 90% done, still missing status reporting or waiting for
3548 the buildsets to finish, and it is completely untested.
3550 * buildbot/trybuild.py: delete file, move contents to ..
3551 * buildbot/scripts/tryclient.py (getSourceStamp): .. here
3552 * buildbot/test/test_vc.py: match the move
3554 * buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
3555 of the TryScheduler, no buildsetID or status-tracking support yet
3556 * buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
3558 * buildbot/changes/maildir.py (Maildir.setBasedir): make it
3559 possible to set the basedir after __init__ time, so it is easier
3560 to use as a Service-child of the BuildMaster instance
3562 * buildbot/changes/maildirtwisted.py (MaildirService): make a form
3563 that delivers messages to its Service parent instead of requiring
3564 a subclass to be useful. This turns out to be much easier to build
3567 * buildbot/scripts/tryclient.py (createJob): utility code to
3568 create jobfiles, will eventually be used by 'buildbot try'
3570 2005-08-08 Brian Warner <warner@lothar.com>
3572 * docs/buildbot.texinfo (try): add docs on the
3573 as-yet-unimplemented Try scheduler
3575 * buildbot/test/test_buildreq.py: move Scheduling tests out to ..
3576 * buildbot/test/test_scheduler.py: .. here
3577 (Scheduling.testTryJobdir): add placeholder test for 'try'
3579 * buildbot/test/test_status.py (Log.testMerge3): update to match new
3580 addEntry merging (>=chunkSize) behavior
3581 (Log.testConsumer): update to handle new callLater(0) behavior
3583 * buildbot/test/test_web.py: rearrange tests a bit, add test for
3584 both the MAX_LENGTH bugfix and the resumeProducing hang.
3586 * buildbot/status/builder.py (LogFileProducer.resumeProducing):
3587 put off the actual resumeProducing for a moment with
3588 reactor.callLater(0). This works around a twisted-1.3.0 bug which
3589 causes large logfiles to hang midway through.
3591 * buildbot/process/step.py (BuildStep.addCompleteLog): break the
3592 logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
3593 and to improve memory usage when streaming the file out to a web
3595 * buildbot/status/builder.py (LogFile.addEntry): change > to >= to
3596 make this work cleanly
3598 2005-08-03 Brian Warner <warner@lothar.com>
3600 * buildbot/trybuild.py: new file for 'try' utilities
3601 (getSourceStamp): run in a tree, find out the baserev+patch
3602 * buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
3603 implemented for SVN and Darcs, still working on Arch. I don't know
3604 how to make CVS work yet.
3606 * docs/buildbot.texinfo: document the 'buildbot' command-line
3607 tool, including the not-yet-implemented 'try' feature, and the
3608 in-flux .buildbot/ options directory.
3610 2005-07-20 Brian Warner <warner@lothar.com>
3612 * buildbot/locks.py: added temporary id() numbers to Lock
3613 descriptions, to track down a not-really-sharing-the-Lock bug
3615 * buildbot/test/runutils.py: must import errno, cut-and-paste bug
3617 * buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
3618 needed for python2.2 compatibility
3619 * buildbot/test/test_vc.py: python2.2 compatibility: generators
3620 are from the __future__
3622 2005-07-19 Brian Warner <warner@lothar.com>
3624 * buildbot/master.py (BuildMaster.loadConfig): give a better error
3625 message when schedulers use unknown builders
3627 * buildbot/process/builder.py (Builder.compareToSetup): make sure
3628 SlaveLock('name') and MasterLock('name') are distinct
3630 * buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
3631 c['schedulers'] in such a way that we can actually accept
3633 * buildbot/test/test_config.py: check it
3635 * buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
3636 utility method to *all* the Schedulers
3637 (Periodic.listBuilderNames): same
3639 * docs/buildbot.texinfo (Interlocks): update chapter to match
3642 * buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
3643 to make sure that c['sources'], c['schedulers'], and c['status']
3644 are all lists of the appropriate objects, and that the Schedulers
3645 all point to real Builders
3646 * buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
3647 'listBuilderNames' utility method to support this
3648 * buildbot/scheduler.py: implement the utility method
3649 * buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
3651 * docs/buildbot.texinfo: add some @cindex entries
3653 * buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
3654 if it wasn't already set: most tla commands will fail unless one
3656 (Arch.createRepository): and disable bazaar's revision cache, since
3657 they cause test failures (the multiple repositories we create all
3658 interfere with each other through the cache)
3660 * buildbot/test/test_web.py (WebTest): remove use of deferredResult,
3661 bring it properly up to date with twisted-2.0 test guidelines
3663 * buildbot/master.py (BuildMaster): remove references to old
3664 'interlock' module, this caused a bunch of post-merge test
3666 * buildbot/test/test_config.py: same
3667 * buildbot/process/base.py (Build): same
3669 * buildbot/test/test_slaves.py: stubs for new test case
3671 * buildbot/scheduler.py: add test-case-name tag
3672 * buildbot/test/test_buildreq.py: same
3674 * buildbot/slave/bot.py (SlaveBuilder.__init__): remove some
3675 unnecessary init code
3676 (Bot.remote_setBuilderList): match it
3678 * docs/buildbot.texinfo (@settitle): don't claim version 1.0
3680 * buildbot/changes/mail.py (parseSyncmail): update comment
3682 * buildbot/test/test_slavecommand.py: disable Shell tests on
3683 platforms that don't suport IReactorProcess
3685 * buildbot/status/builder.py (LogFile): remove the 't' mode from
3686 all places where we open logfiles. It causes OS-X to open the file
3687 in some weird mode that that prevents us from mixing reads and
3688 writes to the same filehandle, which we depend upon to implement
3689 _generateChunks properly. This change doesn't appear to break
3690 win32, on which "b" and "t" are treated differently but a missing
3691 flag seems to be interpreted as "t".
3693 2005-07-18 Brian Warner <warner@lothar.com>
3695 * buildbot/slave/commands.py (ShellCommand): overhaul
3696 error-handling code, to try and make timeout/interrupt work
3697 properly, and make win32 happier
3698 * buildbot/test/test_slavecommand.py: clean up, stop using
3699 reactor.iterate, add tests for timeout and interrupt
3700 * buildbot/test/sleep.py: utility for a new timeout test
3702 * buildbot/twcompat.py: copy over twisted 1.3/2.0 compatibility
3703 code from the local-usebranches branch
3705 2005-07-17 Brian Warner <warner@lothar.com>
3707 * buildbot/process/process_twisted.py
3708 (TwistedReactorsBuildFactory): change the treeStableTimer to 5
3709 minutes, to match the other twisted BuildFactories, and don't
3710 excuse failures in c/qt/win32 reactors any more.
3712 * docs/examples/twisted_master.cfg: turn off the 'threadless' and
3713 'freebsd' builders, since the buildslaves have been unavailable
3716 2005-07-13 Brian Warner <warner@lothar.com>
3718 * buildbot/test/test_vc.py (VCBase.do_branch): test the new
3719 build-on-branch feature
3721 * buildbot/process/step.py (Darcs.__init__): add base_url and
3722 default_branch arguments, just like SVN
3723 (Arch.__init__): note that the version= argument is really the
3726 * buildbot/slave/commands.py (SourceBase): keep track of the
3727 repository+branch that was used for the last checkout in
3728 SRCDIR/.buildbot-sourcedata . If the contents of this file do not
3729 match, we clobber the directory and perform a fresh checkout
3730 rather than trying to do an in-place update. This should protect
3731 us against trying to get to branch B by doing an update in a tree
3732 obtained from branch A.
3733 (CVS.setup): add CVS-specific sourcedata: root, module, and branch
3734 (SVN.setup): same, just the svnurl
3735 (Darcs.setup): same, just the repourl
3736 (Arch.setup): same, arch coordinates (url), version, and
3737 buildconfig. Also pull the buildconfig from the args dictionary,
3738 which we weren't doing before, so the build-config was effectively
3740 (Arch.sourcedirIsUpdateable): don't try to update when we're
3741 moving to a specific revision: arch can't go backwards, so it is
3742 safer to just clobber the tree and checkout a new one at the
3744 (Bazaar.setup): same sourcedata as Arch
3746 * buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
3747 use maybeWait, to work with twisted-1.3.0 and twcompat
3748 (Dependencies.testRun_Pass): same
3750 * buildbot/test/test_vc.py: rearrange, cleanup
3752 * buildbot/twcompat.py: add defer.waitForDeferred and
3753 utils.getProcessOutputAndValue, so test_vc.py (which uses them)
3754 can work under twisted-1.3.0 .
3756 * buildbot/test/test_vc.py: rewrite. The sample repositories are
3757 now created at setUp time. This increases the runtime of the test
3758 suite considerably (from 91 seconds to 151), but it removes the
3759 need for an offline tarball, which should solve a problem I've
3760 seen where the test host has a different version of svn than the
3761 tarball build host. The new code also validates that mode=update
3762 really picks up recent commits. This approach will also make it
3763 easier to test out branches, because the code which creates the VC
3764 branches is next to the code which uses them. It will also make it
3765 possible to test some change-notification hooks, by actually
3766 performing a VC commit and watching to see the ChangeSource get
3769 2005-07-12 Brian Warner <warner@lothar.com>
3771 * docs/buildbot.texinfo (SVN): add branches example
3772 * docs/Makefile (buildbot.ps): add target for postscript manual
3774 * buildbot/test/test_dependencies.py: s/test_interlocks/test_locks/
3775 * buildbot/test/test_locks.py: same
3777 * buildbot/process/step.py (Darcs): comment about default branches
3779 * buildbot/master.py (BuildMaster.loadConfig): don't look for
3780 c['interlocks'] in the config file, complain if it is present.
3781 Scan all locks in c['builders'] to make sure the Locks they use
3783 * buildbot/test/test_config.py: remove old c['interlocks'] test,
3784 add some tests to check for non-uniquely-named Locks
3785 * buildbot/test/test_vc.py (Patch.doPatch): fix factory.steps,
3786 since the unique-Lock validation code requires it now
3788 * buildbot/locks.py: fix test-case-name
3790 * buildbot/interlock.py: remove old file
3792 2005-07-11 Brian Warner <warner@lothar.com>
3794 * buildbot/test/test_interlock.py: rename to..
3795 * buildbot/test/test_locks.py: .. something shorter
3797 * buildbot/slave/bot.py (BuildSlave.stopService): newer Twisted
3798 versions (after 2.0.1) changed internet.TCPClient to shut down the
3799 connection in stopService. Change the code to handle this
3802 * buildbot/process/base.py (Build): handle whole-Build locks
3803 * buildbot/process/builder.py (Builder.compareToSetup): same
3804 * buildbot/test/test_interlock.py: make tests work
3806 * buildbot/process/step.py (BuildStep.startStep): complain if a
3807 Step tries to claim a lock that's owned by its own Build
3808 (BuildStep.releaseLocks): typo
3810 * buildbot/locks.py (MasterLock): use ComparableMixin so config
3811 file reloads don't replace unchanged Builders
3813 * buildbot/test/test_config.py (ConfigTest.testInterlocks):
3814 rewrite to cover new Locks instead of old c['interlocks']
3815 * buildbot/test/runutils.py (RunMixin.connectSlaves): remember
3819 * buildbot/test/test_dependencies.py (Dependencies.setUp): always
3820 start the master and connect the buildslave
3822 * buildbot/process/step.py (FailingDummy.done): finish with a
3823 FAILURE status rather than raising an exception
3825 * buildbot/process/base.py (BuildRequest.mergeReasons): don't try to
3826 stringify a BuildRequest.reason that is None
3828 * buildbot/scheduler.py (BaseUpstreamScheduler.buildSetFinished):
3830 * buildbot/status/builder.py (BuildSetStatus): implement enough to
3831 allow scheduler.Dependent to work
3832 * buildbot/buildset.py (BuildSet): set .reason and .results
3834 * buildbot/test/test_interlock.py (Locks.setUp): connect both
3835 slaves, to make the test stop hanging. It still fails, of course,
3836 because I haven't even started to implement Locks.
3838 * buildbot/test/runutils.py (RunMixin.connectSlaves): new utility
3840 * docs/buildbot.texinfo (Build-Dependencies): redesign the feature
3841 * buildbot/interfaces.py (IUpstreamScheduler): new Interface
3842 * buildbot/scheduler.py (BaseScheduler): factor out common stuff
3843 (Dependent): new class for downstream build dependencies
3844 * buildbot/test/test_dependencies.py: tests (still failing)
3846 * buildbot/buildset.py (BuildSet.waitUntilSuccess): minor notes
3848 2005-07-07 Brian Warner <warner@lothar.com>
3850 * buildbot/test/runutils.py (RunMixin): factored this class out..
3851 * buildbot/test/test_run.py: .. from here
3852 * buildbot/test/test_interlock.py: removed old c['interlock'] tests,
3853 added new buildbot.locks tests (which all hang right now)
3854 * buildbot/locks.py (SlaveLock, MasterLock): implement Locks
3855 * buildbot/process/step.py: claim/release per-BuildStep locks
3857 * docs/Makefile: add 'buildbot.html' target
3859 * buildbot/process/step.py (CVS.__init__): allow branch=None to be
3860 interpreted as "HEAD", so that all VC steps can accept branch=None
3861 and have it mean the "default branch".
3863 * docs/buildbot.texinfo: add Schedulers, Dependencies, and Locks
3865 2005-07-07 Brian Warner <warner@lothar.com>
3867 * docs/examples/twisted_master.cfg: update to match current usage
3869 * docs/buildbot.texinfo (System Architecture): comment out the
3870 image, it doesn't exist yet and just screws up the HTML manual.
3872 2005-07-05 Brian Warner <warner@lothar.com>
3874 * debian/.cvsignore: oops, missed one. Removing leftover file.
3876 2005-06-17 Brian Warner <warner@lothar.com>
3878 * buildbot/test/test_vc.py (VCSupport.__init__): svn --version
3879 changed its output in 1.2.0, don't mistakenly think that the
3880 subversion we find isn't capable of supporting our tests.
3882 * debian/*: remove the debian/ directory and its contents, to make
3883 life easier for the proper Debian maintainer
3885 * Makefile (release): same
3887 2005-06-07 Brian Warner <warner@lothar.com>
3889 * everything: create a distinct SourceStamp class to replace the
3890 ungainly 4-tuple, let it handle merging instead of BuildRequest.
3891 Changed the signature of Source.startVC to include the revision
3892 information (instead of passing it through self.args). Implement
3893 branches for SVN (now only Darcs/Git is missing support). Add more
3896 2005-06-06 Brian Warner <warner@lothar.com>
3898 * everything: rearrange build scheduling. Create a new Scheduler
3899 object (configured in c['schedulers'], which submit BuildSets to a
3900 set of Builders. Builders can now use multiple slaves. Builds can
3901 be run on alternate branches, either requested manually or driven
3902 by changes. This changed some of the Status classes. Interlocks
3903 are out of service until they've been properly split into Locks
3904 and Dependencies. treeStableTimer, isFileImportant, and
3905 periodicBuild have all been moved from the Builder to the
3907 (BuilderStatus.currentBigState): removed the 'waiting' and
3908 'interlocked' states, removed the 'ETA' argument.
3910 2005-05-24 Brian Warner <warner@lothar.com>
3912 * buildbot/pbutil.py (ReconnectingPBClientFactory): Twisted-1.3
3913 erroneously abandons the connection (in clientConnectionFailed)
3914 for non-UserErrors, which means that if we lose the connection due
3915 to a network problem or a timeout, we'll never try to reconnect.
3916 Fix this by not upcalling to the buggy parent method. Note:
3917 twisted-2.0 fixes this, but the function only has 3 lines so it
3918 makes more sense to copy it than to try and detect the buggyness
3919 of the parent class. Fixes SF#1207588.
3921 * buildbot/changes/changes.py (Change.branch): doh! Add a
3922 class-level attribute to accomodate old Change instances that were
3923 pickled before 0.6.5 (where .branch was added for new Changes).
3924 This fixes the exception that occurs when you try to look at an
3925 old Change (through asHTML).
3927 * buildbot/__init__.py (version): bump to 0.6.6+ while between
3930 2005-05-23 Brian Warner <warner@lothar.com>
3932 * buildbot/__init__.py (version): release 0.6.6
3934 2005-05-23 Brian Warner <warner@lothar.com>
3936 * NEWS: update for 0.6.6 release
3937 * debian/changelog: same
3939 * buildbot/scripts/runner.py (start): put the basedir in sys.path
3940 before starting: this was done by twistd back when we spawned it,
3941 now that we're importing the pieces and running them in the
3942 current process, we have to do it ourselves. This allows
3943 master.cfg to import files from the same directory without
3944 explicitly manipulating PYTHONPATH. Thanks to Thomas Vander
3945 Stichele for the catch.
3946 (Options.opt_version): Add a --version command (actually, just make
3947 the existing --version command emit Buildbot's version too)
3949 * buildbot/status/builder.py (HTMLLogFile.upgrade): oops! second
3950 fix to make this behave like other LogFiles, this time to handle
3951 existing LogFiles on disk. (add the missing .upgrade method)
3952 * buildbot/test/test_status.py (Log.testHTMLUpgrade): test it
3954 2005-05-21 Brian Warner <warner@lothar.com>
3956 * buildbot/test/test_runner.py (Create.testMaster): match the
3957 rawstring change in runner.py:masterTAC
3959 * buildbot/test/test_config.py (ConfigTest.testIRC): skip unless
3960 TwistedWords is installed
3961 * buildbot/test/test_status.py: same, with TwistedMail
3963 * buildbot/master.py: remove old IRC/Waterfall imports (used by
3964 some old, deprecated, and removed config keys). This should enable
3965 you to use the base buildbot functionality with Twisted-2.0.0 when
3966 you don't also have TwistedWeb and TwistedWords installed
3968 2005-05-20 Brian Warner <warner@lothar.com>
3970 * buildbot/scripts/runner.py (run): call sendchange(), not
3971 do_sendchange(): thus 'buildbot sendchange' was broken in 0.6.5
3972 (run): call stop("HUP"), not "-HUP", 'buildbot stop' was broken.
3973 (stop): don't wait for process to die when sending SIGHUP
3974 (masterTAC): use a rawstring for basedir=, otherwise '\' in the
3975 directory name gets interpreted, which you don't want
3978 * buildbot/__init__.py (version): bump to 0.6.5+ while between
3981 2005-05-18 Brian Warner <warner@lothar.com>
3983 * buildbot/__init__.py (version): Releasing buildbot-0.6.5
3985 2005-05-18 Brian Warner <warner@lothar.com>
3987 * README: update for 0.6.5
3988 * debian/changelog: same
3990 * buildbot/changes/changes.py: rename tag= to branch=, since
3991 that's how we're using it, and my design for the upcoming "build a
3992 specific branch" feature wants it. also, tag= was too CVS-centric
3993 * buildbot/changes/mail.py (parseSyncmail): same
3994 * buildbot/process/base.py (Build.isBranchImportant): same
3995 * buildbot/test/test_mailparse.py (Test3.testMsgS4): same
3996 * docs/buildbot.texinfo (Attributes of Changes): same
3998 * NEWS: update tag=, update for upcoming release
4000 2005-05-17 Brian Warner <warner@lothar.com>
4002 * buildbot/scripts/runner.py (stop): actually poll once per
4003 second, instead of re-killing the poor daemon once per second.
4004 Sleep briefly (0.1s) before the first poll, since there's a good
4005 chance we can avoid waiting the full second if the daemon shuts
4006 down quickly. Also remove the sys.exit() at the end.
4007 (start): remove the unneighborly sys.exit()
4009 * Makefile: improve permission-setting to not kick Arch so badly
4011 * buildbot/scripts/runner.py (SlaveOptions.optParameters): set a
4012 default --keepalive=600, since it doesn't hurt very much, and it's
4013 a hassle to discover that you need it.
4014 * buildbot/test/test_runner.py (Create.testSlave): test it
4016 * buildbot/status/words.py (IrcStatusBot.buildFinished): Teach the
4017 IRC bot about EXCEPTION
4019 * buildbot/status/client.py (PBListener): upcall more correctly
4021 * buildbot/process/base.py (Build.allStepsDone): if a step caused
4022 an exception mark the overall build with EXCEPTION, not SUCCESS
4024 * buildbot/scripts/runner.py (makefile_sample): remove the leading
4026 * buildbot/status/mail.py (MailNotifier): oops, forgot to upcall
4027 * Makefile: update some release-related stuff
4029 * buildbot/slave/commands.py (ShellCommand.kill): if somehow this
4030 gets called when there isn't actually an active process, just end
4031 the Command instead of blowing up. I don't know how it gets into
4032 this state, but the twisted win32 buildslave will sometimes hang,
4033 and when it shakes its head and comes back, it thinks it's still
4034 running a Command. The next build causes this command to be
4035 interrupted, but the lack of self.process.pid breaks the interrupt
4038 * NEWS: document changes since the last release
4040 * buildbot/scripts/runner.py (start): change 'buildbot start' to
4041 look for Makefile.buildbot instead of a bare Makefile . The
4042 'buildbot start' does not install this file, so you have to
4043 manually copy it if you want to customize startup behavior.
4044 (createMaster): change 'buildbot master' command to create
4045 Makefile.sample instead of Makefile, to create master.cfg.sample
4046 instead of master.cfg (requiring you to copy it before the
4047 buildmaster can be started). Both sample files are kept up to
4048 date, i.e. they are overwritten if they have been changed. The
4049 'buildbot.tac' file is *not* overwritten, but if the new contents
4050 don't match the old, a 'buildbot.tac.new' file is created and the
4051 user is warned. This seems to be a much more sane way to handle
4052 startup files. Also, don't sys.exit(0) when done, so we can run
4053 unit tests against it.
4054 (createSlave): same. Don't overwrite the sample info/ files.
4055 * buildbot/scripts/sample.mk: remove. the contents were pulled
4056 into runner.py, since they need to match the behavior of start()
4060 * docs/buildbot.texinfo (Launching the daemons): document it
4061 * buildbot/test/test_runner.py (Create): test it
4063 * buildbot/test/test_vc.py (SetupMixin.failUnlessIn): Add a
4064 version that can handle string-in-string tests, because otherwise
4065 python-2.2 fails the tests. It'd be tremendous if Trial's test
4066 took two strings under 2.2 too.
4068 * everything: fixed all deprecation warnings when running against
4069 Twisted-2.0 . (at least all the ones in buildbot code, there are a
4070 few that come from Twisted itself). This involved putting most of
4071 the Twisted-version specific code in the new buildbot.twcompat
4072 module, and creating some abstract base classes in
4073 buildbot.changes.base and buildbot.status.base (which might be
4074 useful anyway). __implements__ is a nuisance and requires an ugly
4075 'if' clause everywhere.
4077 * buildbot/test/test_status.py (Mail.testMail): add a 0.1 second
4078 delay before finishing the test: it seems that smtp.sendmail
4079 doesn't hang up on the server, so we must wait a moment so it can
4080 hang up on us. This removes the trial warning about an unclean
4083 2005-05-16 Brian Warner <warner@lothar.com>
4085 * buildbot/process/step.py (Source): add 'retry' argument. It is a
4086 tuple of (delay, repeats).
4087 * buildbot/test/test_vc.py (Retry): test it
4088 * docs/buildbot.texinfo (Source Checkout): document it
4089 * buildbot/slave/commands.py (SourceBase): add 'retry' parameter.
4090 (SourceBase.maybeDoVCRetry): If 'retry' is set, failures in
4091 doVCFull() are handled by re-trying the checkout (after a delay)
4092 some number of times.
4093 (ShellCommand._startCommand): make header lines easier to read
4095 * buildbot/test/test_web.py (WebTest.tearDown): factor out master
4097 (WebTest.test_logfile): make sure master gets shut down, silences
4098 some "unclean reactor" test errors
4100 * buildbot/test/test_changes.py (Sender.tearDown): spin the
4101 reactor once after shutdown, something in certain versions of
4102 Twisted trigger a test failure. 1.3.0 is ok, 2.0.0 fails, 2.0.1pre
4103 fails, svn-trunk is ok.
4105 * buildbot/test/test_slavecommand.py (Shell.testShellZ): add a
4106 second win32 error message
4108 * buildbot/test/test_run.py (Status.testSlave): be smarter about
4109 validating the ETA, so the tests don't fail on slow systems
4111 2005-05-15 Brian Warner <warner@lothar.com>
4113 * buildbot/status/builder.py (HTMLLogFile): make this behave like
4114 the new LogFile class, so upgrading works properly
4115 (LogFileProducer.resumeProducing): survive resumeProducing after
4116 we've exhausted the chunkGenerator
4118 * buildbot/test/test_web.py (WebTest.test_logfile): validate HTML
4120 * buildbot/test/test_status.py (Log.testAdd): validate hasContents
4121 (Log.testUpgrade): same
4123 * docs/buildbot.texinfo (Maintenance): describe how to delete old
4124 Builds and logs with a cron job.
4126 * buildbot/status/builder.py (LogFile): revamp LogFiles. Got rid
4127 of the old non-offline LogFile, added code to upgrade these to
4128 new-style contents-live-on-disk instances at load time (in a way
4129 that doesn't invalidate the old Build pickles, so upgrading to
4130 0.6.5 is not a one-way operation). Got rid of everything related
4132 (LogFile.__init__): create LogFiles with the parent step status,
4133 the log's name, and a builder-relative filename where it can keep
4134 the contents on disk.
4135 (LogFile.hasContents): new method, clients are advised to call it
4136 before getText or getChunks and friends. If it returns False, the
4137 log's contents have been deleted and getText() will raise an
4139 (LogFile.getChunks): made it a generator
4140 (LogFile.subscribeConsumer): new method, takes a Twisted-style
4141 Consumer (except one that takes chunks instead of strings). This
4142 enables streaming of very large logfiles without storing the whole
4144 (BuildStatus.generateLogfileName): create names like
4145 12-log-compile-output, with a _0 suffix if required to be unique
4146 (BuildStatus.upgradeLogfiles): transform any old-style (from 0.6.4
4147 or earlier) logfiles into new-style ones
4148 (BuilderStatus): remove everything related to 'stub' builds. There
4149 is now only one build cache, and we don't strip logs from old
4151 (BuilderStatus.getBuildByNumber): check self.currentBuild too,
4152 since we no longer fight to keep it in the cache
4154 * buildbot/status/html.py (TextLog.render_GET): use a
4155 ChunkConsumer to stream the log entries efficiently.
4156 (ChunkConsumer): wrapper which consumes chunks and writes
4159 * buildbot/test/test_twisted.py (Parse.testParse): use a
4160 LogFile-like object instead of a real one
4162 * buildbot/test/test_status.py (MyLog): handle new LogFile code
4163 (Log.testMerge3): validate more merge behavior
4164 (Log.testChunks): validate LogFile.getChunks
4165 (Log.testUpgrade): validate old-style LogFile upgrading
4166 (Log.testSubscribe): validate LogFile.subscribe
4167 (Log.testConsumer): validate LogFile.subscribeConsumer
4169 * buildbot/interfaces.py (IStatusLogStub): remove
4170 (IStatusLog.subscribeConsumer): new method
4171 (IStatusLog.hasContents): new method
4172 (IStatusLogConsumer): describes things passed to subscribeConsumer
4174 * buildbot/status/html.py (StepBox.getBox): Don't offer an href to
4175 the log contents if it does not have any contents.
4176 (StatusResourceBuildStep.body): same
4177 (StatusResourceBuildStep.getChild): give a 404 for empty logs
4179 2005-05-14 Brian Warner <warner@lothar.com>
4181 * buildbot/test/test_web.py (WebTest.test_logfile): add 5-second
4182 timeouts to try and make the windows metabuildslave not hang
4184 2005-05-13 Mike Taylor <bear@code-bear.com>
4186 * buildbot/slave/commands.py (rmdirRecursive): added a check
4187 to ensure the path passed into rmdirRecursive actually exists.
4188 On win32 a non-existant path would generate an exception.
4190 2005-05-13 Brian Warner <warner@lothar.com>
4192 * buildbot/slave/commands.py (rmdirRecursive): replacement for
4193 shutil.rmtree which behaves correctly on windows in the face of
4194 files that you have to chmod before deleting. Thanks to Bear at
4195 the OSAF for the routine.
4196 (SourceBase.doClobber): use rmdirRecursive
4198 2005-05-12 Brian Warner <warner@lothar.com>
4200 * buildbot/status/builder.py (OfflineLogFile.getChunks): have this
4201 method generate chunks instead of returning a big list. This
4202 allows the same method to be used for both old LogFile and new
4204 (OfflineLogFile.getText): use the generator
4205 (OfflineLogFile.subscribe): same
4206 * buildbot/status/html.py (TextLog.resumeProducing): same
4207 * buildbot/interfaces.py (IStatusLog.getChunks): document it
4209 * buildbot/test/test_web.py (WebTest.test_logfile): Add a test to
4210 point out that OfflineLogFile does not currently work with
4211 html.Waterfall . Fixing this is high-priority.
4213 * buildbot/scripts/runner.py (start): add --logfile=twistd.log, since
4214 apparently windows defaults to using stdout
4216 * buildbot/test/test_slavecommand.py (Shell.testShellZ): log a
4217 better message on failure so I can figure out the win32 problem
4219 * buildbot/slave/commands.py (ShellCommand._startCommand): update
4220 log messages to include more useful copies of the command being
4221 run, the argv array, and the child command's environment.
4222 (Git.doVCFull): update cg-close usage, patch from Brandon Philips.
4224 2005-05-11 Brian Warner <warner@lothar.com>
4226 * setup.py: oops, install debug.glade so 'buildbot debugclient'
4228 * Makefile: update the deb-snapshot version
4230 * docs/buildbot.texinfo: move all .xhtml docs into a new
4231 .texinfo-format document, adding a lot of material in the process.
4232 This is starting to look like a real user's manual. Removed all
4233 the Lore-related files: *.xhtml, *.css, template.tpl .
4234 * docs/Makefile: simple makefile to run 'makeinfo'
4235 * buildbot/scripts/sample.cfg: rearrange slightly
4236 * MANIFEST.in: include .info and .textinfo, don't include *.xhtml
4238 2005-05-10 Brian Warner <warner@lothar.com>
4240 * buildbot/scripts/runner.py (start): Twisted-1.3.0 used a
4241 different name for the internal twistw module, handle it.
4243 * MANIFEST.in: we deleted plugins.tml, so stop shipping it
4244 * setup.py: .. and stop trying to install it
4246 * buildbot/process/step.py (Git): added support for 'cogito' (aka
4247 'git'), the new linux kernel VC system (http://kernel.org/git/).
4248 Thanks to Brandon Philips for the patch.
4249 * buildbot/slave/commands.py (Git): same
4251 2005-05-06 Brian Warner <warner@lothar.com>
4253 * buildbot/status/builder.py (OfflineLogFile): replace the default
4254 LogFile with a form that appends its new contents to a disk file
4255 as they arrive. The complete log data is never kept in RAM. This
4256 is the first step towards handling very large (100MB+) logfiles
4257 without choking quite so badly. (The other half is
4258 producer/consumer on the HTML pages).
4259 (BuildStepStatus.addLog): use OfflineLogFile by default
4260 (BuildStatus.getLogfileName): helper code to give the
4261 OfflineLogFile a filename to work with
4263 * buildbot/test/test_status.py (Results.testAddResults): update
4264 tests to handle new asserts
4265 * buildbot/test/test_vc.py (Patch.doPatch): same
4266 * buildbot/test/test_steps.py (BuildStep.setUp): same
4268 2005-05-05 Brian Warner <warner@lothar.com>
4270 * buildbot/scripts/runner.py (start): if there is no Makefile,
4271 launch the app by importing twistd's internals and calling run(),
4272 rather than spawning a new twistd process. This stands a much
4273 better chance of working under windows.
4274 (stop): kill the process with os.kill instead of spawning
4275 /bin/kill, again to reduce the number of external programs which
4276 windows might not have in the PATH. Also wait up to 5 seconds for
4277 the process to go away, allowing things like 'buildbot stop;
4278 buildbot start' to be reliable in the face of slow shutdowns.
4280 * buildbot/master.py (Dispatcher.__getstate__): remove old
4281 .tap-related methods
4282 (BuildMaster.__getstate__): same
4284 * buildbot/slave/bot.py (makeService): same
4285 (Options.longdesc): same
4286 * buildbot/scripts/runner.py: copy over some old mktap option text
4288 * buildbot/scripts/runner.py (masterTAC): stop using mktap.
4289 'buildbot master' now creates a buildbot.tac file, so there is no
4290 longer a create-instance/save/reload sequence. mktap is dead, long
4292 * buildbot/scripts/sample.mk: use twistd -y, not -f
4293 * buildbot/test/test_config.py: remove mktap-based test
4294 * buildbot/bb_tap.py, buildbot/plugins.tml: delete old files
4295 * README: don't reference mktap
4297 * docs/source.xhtml: document some of the attributes that Changes
4300 * docs/steps.xhtml (Bazaar): document the Bazaar checkout step
4302 * general: merge in Change(tag=) patch from Thomas Vander Stichele.
4303 [org.apestaart@thomas--buildbot/buildbot--cvstag--0-dev--patch-2]
4304 * buildbot/changes/changes.py (Change)
4305 * buildbot/changes/mail.py (parseSyncmail)
4306 * buildbot/test/test_mailparse.py (Test3.getNoPrefix)
4308 * buildbot/process/base.py (Build.isTagImportant)
4312 2005-05-04 Brian Warner <warner@lothar.com>
4314 * buildbot/clients/sendchange.py (Sender.send): tear down the PB
4315 connection after sending the change, so that unit tests don't
4316 complain about sockets being left around
4318 * buildbot/status/html.py (WaterfallStatusResource.body): fix
4319 exception in phase=0 rendering
4320 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
4322 * buildbot/changes/dnotify.py (DNotify.__init__): remove debug msg
4324 * buildbot/master.py (BuildMaster.loadConfig): finally remove
4325 deprecated config keys: webPortnum, webPathname, irc, manholePort,
4326 and configuring builders with tuples.
4327 * buildbot/test/test_config.py: stop testing compatibility with
4328 deprecated config keys
4329 * buildbot/test/test_run.py: same
4331 2005-05-03 Brian Warner <warner@lothar.com>
4333 * contrib/arch_buildbot.py: survive if there are no logfiles
4334 (username): just use a string, os.getlogin isn't reliable
4336 * buildbot/scripts/runner.py (sendchange): oops, fix the command
4337 so 'buildbot sendchange' actually works. The earlier test only
4338 covered the internal (non-reactor-running) form.
4340 * contrib/arch_buildbot.py: utility that can run as an Arch hook
4341 script to notify the buildmaster about changes
4343 * buildbot/scripts/runner.py (sendchange): new command to send a
4344 change to a buildbot.changes.pb.PBChangeSource receiver.
4345 * buildbot/test/test_changes.py (Sender): test it
4347 * buildbot/master.py (BuildMaster.startService): mark .readConfig
4348 after any reading of the config file, not just when we do it in
4349 startService. This makes some tests a bit cleaner.
4351 * buildbot/changes/pb.py: add some log messages
4353 * buildbot/process/base.py (Build.startBuild): fix a bug that
4354 caused an exception when the build terminated in the very first
4356 (Build.stepDone): let steps return a status of EXCEPTION. This
4357 terminates the build right away, and sets the build's overall
4358 status to EXCEPTION too.
4359 * buildbot/process/step.py (BuildStep.failed): return a status of
4360 EXCEPTION when that is what has happened.
4362 * buildbot/process/step.py (Arch.computeSourceRevision): finally
4363 implement this, allowing Arch-based projects to get precise
4364 checkouts instead of always using the latest code
4365 (Bazaar): create variant of Arch to let folks use baz instead of
4366 tla. Requires a new buildslave too.
4367 * buildbot/slave/commands.py (Arch): add 'revision' argument
4368 (Bazaar): create variant of Arch that uses baz instead of tla.
4369 Remove the code that extracts the archive name from the
4370 register-archive output, since baz doesn't provide it, and require
4371 the user provide both the archive name and its location.
4372 * buildbot/test/test_vc.py (VC.testBazaar): added tests
4374 2005-05-02 Brian Warner <warner@lothar.com>
4376 * buildbot/scripts/sample.cfg: improve docs for c['buildbotURL'],
4377 thanks to Nick Trout.
4379 * buildbot/scripts/runner.py (Maker.makefile): chmod before edit,
4380 deals better with source Makefile coming from a read-only CVS
4381 checkout. Thanks to Nick Trout for the catch.
4383 * buildbot/__init__.py (version): bump to 0.6.4+ while between
4386 2005-04-28 Brian Warner <warner@lothar.com>
4388 * buildbot/__init__.py (version): Releasing buildbot-0.6.4
4390 * debian/changelog: update for 0.6.4
4392 2005-04-28 Brian Warner <warner@lothar.com>
4394 * README.w32: add a checklist of steps for getting buildbot
4396 * MANIFEST.in: include it in the tarball
4400 * buildbot/master.py (BuildMaster.upgradeToVersion3): deal with
4401 broken .tap files from 0.6.3 by getting rid of .services,
4402 .namedServices, and .change_svc at load time.
4404 2005-04-27 Brian Warner <warner@lothar.com>
4406 * NEWS: update in preparation for new release
4408 * buildbot/test/test_config.py (Save.testSave): don't pull in
4409 twisted.scripts.twistd, we don't need it and it isn't for windows
4412 * buildbot/changes/changes.py (ChangeMaster.saveYourself):
4413 accomodate win32 which can't do atomic-rename
4415 2005-04-27 Brian Warner <warner@lothar.com>
4417 * buildbot/test/test_run.py (Disconnect.testBuild2): crank up some
4418 timeouts to help the slow metabuildbot not flunk them so much
4419 (Disconnect.testBuild3): same
4420 (Disconnect.testBuild4): same
4421 (Disconnect.testInterrupt): same
4423 * buildbot/master.py (BuildMaster.loadChanges): fix change_svc
4424 setup, it was completely broken for new buildmasters (those which
4425 did not have a 'change.pck' already saved. Thanks to Paul Warren
4426 for catching this (embarrassing!) bug.
4427 (Dispatcher.__getstate__): don't save our registered avatar
4428 factories, since they'll be re-populated when the config file is
4430 (BuildMaster.__init__): add a dummy ChangeMaster, used only by
4431 tests (since the real mktap-generated BuildMaster doesn't save
4433 (BuildMaster.__getstate__): don't save any service children,
4434 they'll all be re-populated when the config file is re-read.
4435 * buildbot/test/test_config.py (Save.testSave): test for this
4437 2005-04-26 Brian Warner <warner@lothar.com>
4439 * buildbot/buildbot.png: use a new, smaller (16x16) icon image,
4440 rendered with Blender.. looks a bit nicer.
4441 * buildbot/docs/images/icon.blend: add the Blender file for it
4443 * buildbot/slave/commands.py (ShellCommand._startCommand): prepend
4444 'cmd.exe' (or rather os.environ['COMSPEC']) to the argv list when
4445 running under windows. This appears to be the best way to allow
4446 BuildSteps to do something normal like 'trial -v buildbot.test' or
4447 'make foo' and still expect it to work. The idea is to make the
4448 BuildSteps look as much like what a developer would type when
4449 compiling or testing the tree by hand. This approach probably has
4450 problems when there are spaces in the arguments, so if you've got
4451 windows buildslaves, you'll need to pay close attention to your
4454 * buildbot/status/html.py (WaterfallStatusResource.body): add the
4455 timezone to the timestamp column.
4456 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
4458 * buildbot/scripts/runner.py (loadOptions): do something sane for
4459 windows, I think. We use %APPDATA%/buildbot instead of
4460 ~/.buildbot, but we still search everywhere from the current
4461 directory up to the root for a .buildbot/ subdir. The "is it under
4462 $HOME" security test was replaced with "is it owned by the current
4463 user", which is only performed under posix.
4464 * buildbot/test/test_runner.py (Options.testFindOptions): update
4465 tests to match. The "is it owned by the current user" check is
4466 untested. The test has been re-enabled for windows.
4468 * buildbot/test/test_slavecommand.py (Shell.checkOutput): replace
4469 any "\n" in the expected output with the platform-specific line
4470 separator. Make this separator "\r\n" on PTYs under unix, they
4471 seem to do that and I don't know why
4473 * buildbot/test/test_runner.py (Options.optionsFile): disable on
4474 windows for now, I don't know what ~/.buildbot/ should mean there.
4476 * buildbot/test/test_run.py (BuilderNames.testGetBuilderNames):
4477 win32 compatibility, don't use "/tmp"
4478 (Basedir.testChangeBuilddir): remove more unixisms
4480 2005-04-26 Brian Warner <warner@lothar.com>
4482 * buildbot/test/test_control.py (Force.rmtree): python2.2
4483 compatibility, apparently its shutil.rmtree ignore_errors=
4484 argument is ignored.
4485 * buildbot/test/test_run.py (Run.rmtree): same
4486 (RunMixin.setUp): same
4488 * buildbot/test/test_runner.py (make): python2.2 has os.sep but
4491 * buildbot/test/test_twisted.py (Parse.failUnlessIn): 2.2 has no
4492 'substring in string' operator, must use string.find(substr)!=-1
4493 * buildbot/test/test_vc.py (Patch.failUnlessIn): same
4494 * buildbot/test/test_web.py (WebTest.failUnlessIn): same
4496 * buildbot/scripts/runner.py (loadOptions): add code to search for
4497 ~/.buildbot/, a directory with things like 'options', containing
4498 defaults for various 'buildbot' subcommands. .buildbot/ can be in
4499 the current directory, your $HOME directory, or anywhere
4500 inbetween, as long as you're somewhere inside your home directory.
4501 (debugclient): look in ~/.buildbot/options for master and passwd
4502 (statuslog): look in ~/.buildbot/options for 'masterstatus'
4503 * buildbot/test/test_runner.py (Options.testFindOptions): test it
4505 * buildbot/status/client.py (makeRemote): new approach to making
4506 IRemote(None) be None, which works under Twisted-2.0
4507 * buildbot/test/test_status.py (Client.testAdaptation): test it
4509 * buildbot/status/builder.py (Status.builderAdded): when loading a
4510 pickled BuilderStatus in from disk, set its name after loading.
4511 The config file might have changed its name (but not its
4512 directory) while it wasn't looking.
4514 * buildbot/process/builder.py (Builder.attached): always return a
4515 Deferred, even if the builder was already attached
4516 * buildbot/test/test_run.py (Basedir.testChangeBuilddir): test it
4518 2005-04-25 Brian Warner <warner@lothar.com>
4520 * buildbot/status/words.py (IrcStatusBot.buildFinished): fix a
4521 category-related exception when announcing a build has finished
4523 * buildbot/status/html.py (StatusResourceChanges.body): oops, don't
4524 reference no-longer-existent changemaster.sources
4525 * buildbot/test/test_web.py (WebTest.test_waterfall): test for it
4527 * buildbot/__init__.py (version): bump to 0.6.3+ while between
4530 2005-04-25 Brian Warner <warner@lothar.com>
4532 * buildbot/__init__.py (version): Releasing buildbot-0.6.3
4534 * debian/changelog: update for 0.6.3
4536 2005-04-25 Brian Warner <warner@lothar.com>
4538 * MANIFEST.in: make sure debug.glade is in the tarball
4540 * README (REQUIREMENTS): list necessary Twisted-2.0 packages
4542 * NEWS: update for the imminent 0.6.3 release
4544 * buildbot/status/html.py (HtmlResource.content): make the
4545 stylesheet <link> always point at "buildbot.css".
4546 (StatusResource.getChild): map "buildbot.css" to a static.File
4547 containing whatever css= argument was provided to Waterfall()
4548 (Waterfall): provide the "classic" css as the default.
4549 * docs/waterfall.classic.css: move default CSS from here ..
4550 * buildbot/status/classic.css: .. to here
4552 * MANIFEST.in: make sure classic.css is included in the tarball
4553 * setup.py: and that it is installed too, under buildbot/status/
4555 * buildbot/master.py (BuildMaster): oops, set .change_svc=None at
4556 the module level, because buildbot.tap files from 0.6.2 don't have
4557 it in their attribute dictionary.
4559 * buildbot/slave/bot.py (Bot.startService): make sure the basedir
4560 really exists at startup, might save some confusion somewhere.
4562 2005-04-24 Thomas Vander Stichele <thomas at apestaart dot org>
4564 * docs/waterfall.classic.css:
4565 add a stylesheet that's almost the same as the "classic"
4568 * buildbot/status/builder.py:
4569 add EXCEPTION as a result - this is a problem for the bot
4570 maintainer, not a build problem for the changers
4571 * buildbot/process/step.py:
4572 use EXCEPTION instead of FAILURE for exceptions
4573 * buildbot/status/html.py:
4574 add build_get_class to get a class out of a build/buildstep
4575 finish naming the classes
4576 split out sourceNames to changeNames and builderNames so we
4577 can style them separately
4578 * docs/config.xhtml:
4579 finish documenting classes as they are right now
4581 * buildbot/status/html.py:
4582 name the classes as we agreed on IRC
4583 * docs/config.xhtml:
4586 * buildbot/status/html.py:
4587 same for cssclass->class_
4589 * buildbot/status/html.py:
4590 as decided on IRC, use class_ for the "class" attribute to not
4591 conflict with the class keyword, and clean up the messy **{} stuff.
4593 * buildbot/status/mail.py:
4594 put back "builders" argument, and fix docstring, because the
4595 code *ignores* builders listed in this argument
4597 * buildbot/process/builder.py:
4598 remove FIXME notes - category is now indeed a cvar of BuilderStatus
4600 * docs/config.xhtml:
4601 describe the category argument for builders
4603 * buildbot/status/builder.py:
4604 Fix a silly bug due to merging
4606 * buildbot/process/builder.py:
4607 remove category from the process Builder ...
4608 * buildbot/status/builder.py:
4609 ... and add it to BuilderStatus instead.
4610 Set category on unpickled builder statuses, they might not have it.
4611 * buildbot/master.py:
4612 include category when doing builderAdded
4613 * buildbot/status/mail.py:
4614 return None instead of self for builders we are not interested in.
4615 * buildbot/test/test_run.py:
4616 fix a bug due to only doing deferredResult on "dummy" waiting
4617 * buildbot/test/test_status.py:
4618 add checks for the Mail IStatusReceiver returning None or self
4620 * buildbot/status/html.py:
4621 fix testsuite by prefixing page title with BuildBot
4623 * buildbot/status/builder.py:
4624 have .category in builder status ...
4625 * buildbot/process/builder.py:
4626 ... and set it from Builder
4627 * buildbot/status/html.py:
4628 make .css a class variable
4629 * buildbot/test/test_status.py:
4630 write more tests to cover our categories stuff ...
4631 * buildbot/status/mail.py:
4632 ... and fix the bug that this uncovered
4634 * buildbot/changes/mail.py:
4635 * buildbot/changes/pb.py:
4636 * buildbot/master.py:
4637 * buildbot/process/base.py:
4638 * buildbot/process/factory.py:
4639 * buildbot/process/interlock.py:
4640 * buildbot/process/step.py:
4641 * buildbot/process/step_twisted.py:
4642 * buildbot/slave/commands.py:
4643 * buildbot/status/builder.py:
4644 * buildbot/status/client.py:
4645 * buildbot/status/html.py:
4646 * buildbot/status/mail.py:
4647 * buildbot/status/progress.py:
4648 * buildbot/test/test_changes.py:
4649 * buildbot/test/test_config.py:
4650 * buildbot/test/test_control.py:
4651 * buildbot/test/test_interlock.py:
4652 * buildbot/test/test_maildir.py:
4653 * buildbot/test/test_mailparse.py:
4654 * buildbot/test/test_run.py:
4655 * buildbot/test/test_slavecommand.py:
4656 * buildbot/test/test_status.py:
4657 * buildbot/test/test_steps.py:
4658 * buildbot/test/test_twisted.py:
4659 * buildbot/test/test_util.py:
4660 * buildbot/test/test_vc.py:
4661 * buildbot/test/test_web.py:
4663 add test-case-name at the top of a whole set of files
4665 * buildbot/status/builder.py:
4666 keep order of addition when getting builder names
4667 * buildbot/status/words.py:
4668 * buildbot/test/test_run.py:
4669 add test for getBuilderNames
4671 * buildbot/process/base.py:
4672 * buildbot/process/step.py:
4673 * buildbot/status/builder.py:
4674 * buildbot/status/html.py:
4675 make buildbot css-able
4676 replace the color code for purple with purple, don't understand
4677 why it wasn't purple to start with
4679 * buildbot/status/words.py:
4680 ok, so it doesn't look like BuilderStatus.remote is still valid.
4681 Use what waterfall uses instead.
4683 * buildbot/interfaces.py:
4684 * buildbot/status/builder.py:
4685 * buildbot/status/html.py:
4686 * buildbot/status/mail.py:
4687 * buildbot/status/words.py:
4688 * buildbot/test/test_run.py:
4689 use categories everywhere and make it be a list. More sensible
4690 for the future. Also make words actually respect this in
4693 * buildbot/interfaces.py:
4694 add category argument to getBuilderNames
4695 * buildbot/process/builder.py:
4696 * buildbot/status/builder.py:
4697 * buildbot/status/html.py:
4698 * buildbot/status/mail.py:
4699 * buildbot/status/words.py:
4700 * buildbot/test/test_run.py:
4701 move from specifying builders by name to specifying the category
4703 * buildbot/status/html.py:
4704 * buildbot/status/words.py:
4705 add "builders=" to __init__ of status clients so they can
4706 limit themselves to the given list of builders to report on
4708 * buildbot/status/html.py: set the title to the product name
4710 2005-04-23 Thomas Vander Stichele <thomas at apestaart dot org>
4712 * buildbot/interfaces.py:
4713 * buildbot/status/builder.py:
4714 more documentation. Hm, not sure if ChangeLog entries make sense
4717 2005-04-23 Brian Warner <warner@lothar.com>
4719 * buildbot/test/test_vc.py (SetupMixin.do_vc): increase timeouts
4721 * buildbot/test/test_slavecommand.py (Shell): increase timeouts
4723 * buildbot/scripts/runner.py: make 'statuslog' and 'statusgui' be
4724 the sub-commands that log buildmaster status to stdout and to a
4725 GUI window, respectively.
4727 * buildbot/clients/gtkPanes.py: overhaul. basic two-row
4728 functionality is working again, but all the step-status and ETA
4729 stuff is missing. Commented out a lot of code pending more
4732 * buildbot/status/client.py: make sure that IRemote(None) is None
4734 * buildbot/changes/changes.py: import defer, oops
4735 (ChangeMaster): remove the .sources list, rely upon the fact that
4736 MultiServices can be treated as sequences of their children. This
4737 cleans up the add/remove ChangeSource routines a lot, as we keep
4738 exactly one list of the current sources instead of three.
4740 * buildbot/master.py (BuildMaster.__init__): remove .sources, set
4741 up an empty ChangeMaster at init time.
4742 (BuildMaster.loadChanges): if there are changes to be had from
4743 disk, replace self.change_svc with the new ones. If not, keep
4744 using the empty ChangeMaster set up in __init__.
4745 (BuildMaster.loadConfig_Sources): use list(self.change_svc)
4746 instead of a separate list, makes the code a bit cleaner.
4747 * buildbot/test/test_config.py (ConfigTest.testSimple): match it
4748 (ConfigTest.testSources): same, also wait for loadConfig to finish.
4749 Extend the test to make sure we can get rid of the sources when
4752 2005-04-22 Brian Warner <warner@lothar.com>
4754 * buildbot/scripts/runner.py (Maker.mkinfo): create the info/admin
4755 and info/host files when making the slave directory
4757 * buildbot/test/test_run.py (RunMixin.shutdownSlave): remove the
4758 whendone= argument, just return the Deferred and let the caller do
4759 what they want with it.
4760 (Disconnect.testBuild1): wait for shutdownSlave
4761 (Basedir.testChangeBuilddir): new test to make sure changes to the
4762 builddir actually get propagated to the slave
4764 * buildbot/slave/bot.py (SlaveBuilder.setBuilddir): use an
4765 explicit method, rather than passing the builddir in __init__ .
4766 Make sure to update self.basedir too, this was broken before.
4767 (Bot.remote_setBuilderList): use b.setBuilddir for both new
4768 builders and for ones that have just had their builddir changed.
4769 (BotFactory): add a class-level .perspective attribute, so
4770 BuildSlave.waitUntilDisconnected won't get upset when the
4771 connection hasn't yet been established
4772 (BuildSlave.__init__): keep track of the bot.Bot instance, so
4773 tests can reach through it to inspect the SlaveBuilders
4775 * buildbot/process/base.py (Build.buildException): explain the
4776 log.err with a log.msg
4777 * buildbot/process/builder.py (Builder.startBuild): same
4778 (Builder._startBuildFailed): improve error message
4780 * buildbot/pbutil.py (RBCP.failedToGetPerspective): if the failure
4781 occurred because we lost the brand-new connection, retry instead
4782 of giving up. If not, it's probably an authorization failure, and
4783 it makes sense to stop trying. Make sure we log.msg the reason
4784 that we're log.err'ing the failure, otherwise test failures are
4785 really hard to figure out.
4787 * buildbot/master.py: change loadConfig() to return a Deferred
4788 that doesn't fire until the change has been fully implemented.
4789 This means any connected slaves have been updated with the new
4790 builddir. This change makes it easier to test the code which
4791 actually implements this builddir-updating.
4792 (BotPerspective.addBuilder): return Deferred
4793 (BotPerspective.removeBuilder): same
4794 (BotPerspective.attached): same
4795 (BotPerspective._attached): same. finish with remote_print before
4796 starting the getSlaveInfo, instead of doing them in parallel
4797 (BotPerspective.list_done): same
4798 (BotMaster.removeSlave): same. Fix the typo that meant we weren't
4799 actually calling slave.disconnect()
4800 (BotMaster.addBuilder): same
4801 (BotMaster.removeBuilder): same
4802 (BuildMaster.loadConfig): same
4803 (BuildMaster.loadConfig_Slaves): same
4804 (BuildMaster.loadConfig_Sources): same
4805 (BuildMaster.loadConfig_Builders): same
4806 (BuildMaster.loadConfig_status): same
4808 * buildbot/changes/changes.py (ChangeMaster.removeSource): return
4809 a Deferred that fires when the source is finally removed
4811 * buildbot/slave/commands.py (SourceBase.doClobber): when removing
4812 the previous tree on win32, where we have to do it synchronously,
4813 make sure we return a Deferred anyway.
4814 (SourceBase.doCopy): same
4816 * buildbot/scripts/runner.py (statusgui): use the text client for
4817 now, while I rewrite the Gtk one
4818 * buildbot/clients/base.py: strip out old code, leaving just the
4819 basic print-message-on-event functionality. I also remove the
4820 ReconnectingPBClientFactory, but it does at least quit when it
4821 loses the connection instead of going silent
4823 2005-04-21 Brian Warner <warner@lothar.com>
4825 * Makefile: minor tweaks
4827 * NEWS: point out deprecation warnings, new features for
4830 * buildbot/master.py (BuildMaster.loadConfig): emit
4831 DeprecationWarnings for Builders defined with tuples. Rearrange
4832 code to facility removal of deprecated configuration keys in the
4835 * buildbot/scripts/runner.py (createMaster,createSlave): rewrite
4836 'buildbot' command to put a little Makefile in the target that
4837 helps you re-create the buildbot.tap file, start or stop the
4838 master/slave, and reconfigure (i.e. SIGHUP) the master. Also chmod
4839 all the files 0600, since they contain passwords.
4840 (start): if there is a Makefile, and /usr/bin/make exists, use
4841 'make start' in preference to a raw twistd command. This lets
4842 slave admins put things like PYTHONPATH variables in their
4843 Makefiles and have them still work when the slave is started with
4844 'buildbot start ~/slave/foo'. The test is a bit clunky, it would
4845 be nice to first try the 'make' command and only fall back to
4846 twistd if it fails. TODO: the Makefile's "start" command does not
4847 add the --reactor=win32 argument when running under windows.
4848 (Options.debugclient, Options.statusgui): add sub-commands to launch
4849 the debug client (formerly in contrib/debugclient.py) and the
4850 Gtk status application (currently broken)
4851 * buildbot/clients/debug.py: move from contrib/debugclient.py
4852 * buildbot/clients/debug.glade: same
4854 * buildbot/test/test_trial.py: remove it. This requires some
4855 functionality out of Twisted that isn't there yet, and until then
4856 having it around just confuses things.
4858 * buildbot/test/test_slavecommand.py (Shell): test both with and
4859 without PTYs, and make sure that command output is properly
4860 interleaved in the with-PTY case. I think the without-PTY test
4861 should pass on windows, where we never use PTYs anyway.
4863 2005-04-20 Brian Warner <warner@lothar.com>
4865 * README (REQUIREMENTS): mention Twisted-2.0.0 compatibility
4867 * MANIFEST.in: add epyrun, gen-reference, buildbot.png
4869 * NEWS: start creating entries for the next release
4871 * buildbot/slave/commands.py (ShellCommand.__init__): use os.pathsep
4873 * buildbot/test/test_web.py (WebTest.test_webPortnum): add timeout
4874 (WebTest.test_webPathname): same
4875 (WebTest.test_webPathname_port): same
4876 (WebTest.test_waterfall): use the default favicon rather than
4877 rooting around the filesystem for it. Open the expected-icon file
4878 in binary mode, to make win32 tests happier (thanks to Nick Trout
4880 * buildbot/status/html.py (buildbot_icon): win32 portability
4882 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase.testShellZ):
4883 win32-compatibility fixes from Nick Trout, the "file not found" message
4884 is different under windows
4885 (FakeSlaveBuilder.__init__): clean up setup a bit
4886 * buildbot/test/test_vc.py (VCSupport.__init__): win32: use os.pathsep
4888 2005-04-19 Brian Warner <warner@lothar.com>
4890 * buildbot/test/test_vc.py (SetupMixin.setUpClass): fix the
4891 skip-if-repositories-are-unavailable test to not kill the trial
4892 that comes with Twisted-1.3.0
4894 * setup.py: install buildbot.png icon file when installing code
4896 * buildbot/slave/commands.py (ShellCommand._startCommand): log the
4897 environment used by the command, at least on the child side.
4899 * buildbot/status/html.py (TextLog.pauseProducing): add a note,
4900 this method needs to be added and implemented because it gets
4901 called under heavy load. I don't quite understand the
4902 producer/consumer API enough to write it.
4903 (StatusResource.getChild): add a resource for /favicon.ico
4904 (Waterfall.__init__): add favicon= argument
4905 * buildbot/test/test_web.py (WebTest.test_waterfall): test it
4906 (WebTest.test_webPortnum): stop using deprecated 'webPortnum'
4907 (WebTest.test_webPathname): same
4908 (WebTest.test_webPathname_port): same
4909 * docs/config.xhtml: mention favicon=
4910 * buildbot/buildbot.png: add a default icon, dorky as it is
4912 2005-04-18 Thomas Vander Stichele <thomas at apestaart dot org>
4914 * buildbot/master.py:
4915 * buildbot/process/base.py:
4916 * buildbot/process/builder.py:
4917 * buildbot/process/interlock.py:
4918 * buildbot/status/builder.py:
4919 * buildbot/status/html.py:
4920 * buildbot/status/mail.py:
4921 * buildbot/status/words.py:
4922 new documentation while digging through the code
4924 2005-04-17 Brian Warner <warner@lothar.com>
4926 * general: try to fix file modes on all .py files: a+r, a-x,
4927 but let buildbot/clients/*.py be +x since they're tools
4929 * docs/epyrun (addMod): when an import fails, say why
4931 * Makefile: Add a 'docs' target, hack on the PYTHONPATH stuff
4933 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
4935 * buildbot/process/base.py:
4936 * buildbot/process/builder.py:
4937 * buildbot/status/builder.py:
4938 new documentation while digging through the code
4940 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
4942 * buildbot/changes/changes.py:
4943 * buildbot/changes/p4poller.py:
4944 * buildbot/interfaces.py:
4945 * buildbot/process/base.py:
4946 * buildbot/process/builder.py:
4947 * buildbot/process/step.py:
4948 * buildbot/process/step_twisted.py:
4949 * buildbot/slave/bot.py:
4950 * buildbot/slave/commands.py:
4951 * buildbot/status/builder.py:
4952 fix all docstrings to make epydoc happy. In the process of fixing
4953 some, I also moved pieces of docs, and removed some deprecated
4956 2005-04-17 Thomas Vander Stichele <thomas at apestaart dot org>
4958 * buildbot/process/builder.py:
4959 * buildbot/process/interlock.py:
4960 * buildbot/process/process_twisted.py:
4961 * buildbot/process/step.py:
4962 BuildProcess -> Build, as it looks like that's what happened
4963 * buildbot/process/base.py:
4964 * buildbot/process/factory.py:
4967 2005-04-17 Brian Warner <warner@lothar.com>
4969 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
4970 update compile command to accomodate the Twisted split.. now
4971 instead of './setup.py build_ext -i', you do './setup.py all
4972 build_ext -i', to run build_ext over all sub-projects.
4973 (FullTwistedBuildFactory): same
4974 (TwistedReactorsBuildFactory): same
4976 * buildbot/status/html.py (TextLog.finished): null out self.req
4977 when we're done, otherwise the reference cycle of TextLog to .req
4978 to .notifications to a Deferred to TextLog.stop keeps them from
4979 being collected, and consumes a huge (610MB on pyramid at last
4980 check) amount of memory.
4982 2005-04-11 Brian Warner <warner@lothar.com>
4984 * buildbot/test/test_vc.py (VCSupport.__init__): use abspath() to
4985 normalize the VC-repository location.. makes SVN happier with
4986 certain test environments.
4988 * buildbot/process/step.py (RemoteShellCommand.__init__): let each
4989 RemoteShellCommand gets its own .env dictionary, so that code in
4990 start() doesn't mutate the original. I think this should fix the
4991 step_twisted.Trial problem where multiple identical components
4992 kept getting added to PYTHONPATH= over and over again.
4994 * general: merge org.apestaart@thomas/buildbot--doc--0--patch-3,
4995 adding epydoc-format docstrings to many classes. Thanks to Thomas
4996 Vander Stichele for the patches.
4997 * docs/epyrun, docs/gen-reference: add epydoc-generating tools
4998 * buildbot/status/mail.py, buildbot/process/step_twisted.py: same
4999 * buildbot/slave/bot.py, commands.py, registry.py: same
5001 2005-04-05 Brian Warner <warner@lothar.com>
5003 * buildbot/slave/commands.py (SourceBase.doCopy): use cp -p to
5004 preserve timestamps, helps incremental builds of large trees.
5005 Patch from Rene Rivera.
5007 * buildbot/slave/bot.py (SlaveBuilder.commandComplete): oops, log
5008 'failure' and not the non-existent 'why'. Thanks to Rene Rivera
5011 2005-04-03 Brian Warner <warner@lothar.com>
5013 * buildbot/master.py (BuildMaster.loadConfig): only call exec()
5014 with one dict, apparently exec has some scoping bugs when used
5015 with both global/local dicts. Thanks to Nathaniel Smith for the
5018 2005-04-02 Brian Warner <warner@lothar.com>
5020 * buildbot/process/step_twisted.py (countFailedTests): the new
5021 trial in Twisted-2.0 emits a slightly different status line than
5022 old trial ("PASSED.." instead of "OK.."). Handle it so we don't
5023 mistakenly think the test count is unparseable.
5024 (Trial.start): note that for some reason each build causes another
5025 copy of self.testpath to be prepended to PYTHONPATH. This needs to
5026 be fixed but I'm not sure quite where the problem is.
5028 2005-04-01 Brian Warner <warner@lothar.com>
5030 * buildbot/test/test_run.py (Run.testMaster): change some uses of
5031 deferredResult to avoid hangs/warnings under twisted-2.0
5032 (RunMixin.tearDown): same
5033 (RunMixin.shutdownSlave): same
5034 (Disconnect.testIdle1): same
5035 (Disconnect.testBuild2): same: wait one second after the build
5036 finishes for test to really be done.. this should be cleaned up to
5037 avoid wasting that second. Builder.detach uses a callLater(0),
5038 either that should be done in-line (something else needed that
5039 behavior), or it should return a Deferred that fires when the
5040 builder is really offline.
5041 (Disconnect.testBuild3): same
5042 (Disconnect.testDisappear): same
5044 * buildbot/test/test_web.py: rearrange server-setup and teardown
5045 code to remove unclean-reactor warnings from twisted-2.0
5047 * buildbot/test/test_vc.py: rearrange probe-for-VC-program routine
5048 so the tests don't hang under twisted-2.0
5050 2005-03-31 Brian Warner <warner@lothar.com>
5052 * buildbot/slave/bot.py (Bot.remote_setBuilderList): fix typo that
5053 caused a warning each time the master changed our set of builders
5055 * buildbot/status/builder.py (BuildStatus.saveYourself): under
5056 w32, don't unlink the file unless it already exists. Thanks to
5057 Baptiste Lepilleur for the catch.
5058 (BuilderStatus.saveYourself): same
5060 2005-02-01 Brian Warner <warner@lothar.com>
5062 * buildbot/status/html.py (TextLog.getChild): use a /text child
5063 URL, such as http://foo.com/svn-hello/builds/1/test/0/text instead
5064 of http://foo.com/svn-hello/builds/1/test/0 , to retrieve the
5065 logfile as text/plain (no markup, no headers). This replaces the
5066 previous scheme (which used an ?text=1 argument), and gets us back
5067 to a relative link (which works better when the buildbot lives
5068 behind another web server, such as Apache configured as a reverse
5069 proxy). Thanks to Gerald Combs for spotting the problem.
5071 * buildbot/__init__.py (version): bump to 0.6.2+ while between
5074 2004-12-13 Brian Warner <warner@lothar.com>
5076 * buildbot/__init__.py (version): Releasing buildbot-0.6.2
5078 * debian/changelog: update for 0.6.2
5079 * NEWS: finalize for 0.6.2
5081 2004-12-11 Brian Warner <warner@lothar.com>
5083 * NEWS: bring it up to date
5085 * buildbot/slave/bot.py (BotFactory): revamp keepalive/lost-master
5086 detection code. Require some sign of life from the buildmaster
5087 every BotFactory.keepaliveInterval seconds. Provoke this
5088 indication at BotFactory.keepaliveTimeout seconds before the
5089 deadline by sending a keepalive request. We don't actually care if
5090 that request is answered in a timely fashion, what we care about
5091 is that .activity() is called before the deadline. .activity() is
5092 triggered by any PB message from the master (including an ack to
5093 one of the slave's status-update messages). With this new scheme,
5094 large status messages over slow pipes are OK, as long as any given
5095 message can be sent (and thus acked) within .keepaliveTimeout
5096 seconds (which defaults to 30).
5097 (SlaveBuilder.remote_startCommand): record activity
5098 (SlaveBuilder.ackUpdate): same
5099 (SlaveBuilder.ackComplete): same
5100 (BotFactory.gotPerspective): same
5101 * buildbot/test/test_run.py (Disconnect.testSlaveTimeout): test it
5103 2004-12-09 Brian Warner <warner@lothar.com>
5105 * buildbot/status/html.py (StatusResourceBuilder.getChild): remove
5108 * buildbot/process/step_twisted.py (Trial._commandComplete):
5109 update self.cmd when we start the 'cat test.log' transfer. Without
5110 this, we cannot interrupt the correct RemoteCommand when we lose
5113 * buildbot/process/step.py (RemoteCommand.interrupt): don't bother
5114 trying to tell the slave to stop the command if we're already
5115 inactive, or if we no longer have a .remote
5117 * buildbot/process/builder.py (Builder._detached): don't let an
5118 exception in currentBuild.stopBuild() prevent the builder from
5119 being marked offline
5121 2004-12-07 Brian Warner <warner@lothar.com>
5123 * buildbot/status/words.py (IrcStatusBot.getBuilder): catch the
5124 KeyError that happens when you ask for a non-existent Builder, and
5125 translate it into a UsageError.
5127 * buildbot/test/test_run.py (Disconnect.testBuild4): validate that
5128 losing the slave in the middle of a remote step is handled too
5130 * buildbot/process/step.py (ShellCommand.interrupt): 'reason' can
5131 be a Failure, so be sure to stringify it before using it as the
5132 contents of the 'interrupt' logfile
5133 (RemoteCommand.interrupt): use stringified 'why' in
5134 remote_interruptCommand too, just in case
5136 2004-12-06 Brian Warner <warner@lothar.com>
5138 * buildbot/slave/commands.py (Arch.doVCUpdate): use 'tla replay'
5139 instead of 'tla update', which is more efficient in case we've
5140 missed a couple of patches since the last update.
5142 * debian/changelog: update for previous (0.6.1) release. Obviously
5143 this needs to be handled better.
5145 2004-12-05 Brian Warner <warner@lothar.com>
5147 * NEWS: update for stuff since last release
5149 * buildbot/master.py (DebugPerspective.attached): return 'self', to
5150 match the maybeDeferred change in Dispatcher.requestAvatar
5151 * buildbot/changes/pb.py (ChangePerspective.attached): same
5152 * buildbot/status/client.py (StatusClientPerspective.attached): same
5153 * buildbot/process/builder.py (Builder._attached3): same
5154 * buildbot/pbutil.py (NewCredPerspective.attached): same
5156 * buildbot/status/html.py (WaterfallStatusResource.phase2): Add
5157 the date to the top-most box, if it is not the same as today's
5160 * docs/slave.xhtml: provide a buildslave setup checklist
5162 * docs/source.xhtml (Arch): correct terminology
5164 2004-12-04 Brian Warner <warner@lothar.com>
5166 * buildbot/test/test_slavecommand.py: use sys.executable instead
5167 of hard-coding 'python' for child commands, might help portability
5169 * docs/examples/twisted_master.cfg: update to current usage
5171 * buildbot/status/words.py (IrcStatusBot.command_STOP): add a
5172 'stop build' command to the IRC bot
5174 * buildbot/master.py (Dispatcher.requestAvatar): remove debug
5175 message that broke PBChangeSource
5177 * buildbot/slave/bot.py: clean up shutdown/lose-master code
5178 (SlaveBuilder): make some attributes class-level, remove the old
5179 "update queue" which existed to support resuming a build after the
5180 master connection was lost. Try to reimplement that feature later.
5181 (SlaveBuilder.stopCommand): clear self.command when the
5182 SlaveCommand finishes, so that we don't try to kill a leftover one
5184 (SlaveBuilder.commandComplete): same, merge with commandFailed and
5187 * buildbot/slave/commands.py (SourceBase): set self.command for
5188 all VC commands, so they can be interrupted.
5190 2004-12-03 Brian Warner <warner@lothar.com>
5192 * buildbot/master.py: clean up slave-handling code, to handle
5193 slave-disconnect and multiple-connect better
5194 (BotPerspective): make these long-lasting, exactly one per bot
5195 listed in the config file.
5196 (BotPerspective.attached): if a slave connects while an existing
5197 one appears to still be connected, disconnect the old one first.
5198 (BotPerspective.disconnect): new method to forcibly disconnect a
5199 buildslave. Use some hacks to empty the transmit buffer quickly to
5200 avoid the long (20-min?) TCP timeout that could occur if the old
5201 slave has dropped off the net.
5202 (BotMaster): Keep persistent BotPerspectives in .slaves, let them
5203 own their own SlaveStatus objects. Remove .attached/.detached, add
5204 .addSlave/.removeSlave, treat slaves like Builders (config file
5205 parsing sends deltas to the BotMaster). Inform the slave
5206 instances, i.e. the BotPerspective, about addBuilder and
5208 (BotMaster.getPerspective): turns into a single dict lookup
5209 (Dispatcher.requestAvatar): allow .attached to return a Deferred,
5210 which gives BotPerspective.attached a chance to disconnect the old
5212 (BuildMaster.loadConfig): add code (disabled) to validate that all
5213 builders use known slaves (listed in c['bots']). The check won't
5214 work with tuple-specified builders, which are deprecated but not
5215 yet invalid, so the check is disabled for now.
5216 (BuildMaster.loadConfig_Slaves): move slave-config into a separate
5217 routine, do the add/changed/removed dance with them like we do
5219 (BuildMaster.loadConfig_Sources): move source-config into a
5220 separate routine too
5222 * buildbot/status/builder.py (Status.getSlave): get the
5223 SlaveStatus object from the BotPerspective, not the BotMaster.
5225 * buildbot/test/test_run.py: bunch of new tests for losing the
5226 buildslave at various points in the build, handling a slave that
5227 connects multiple times, and making sure we can interrupt a
5230 * buildbot/slave/bot.py (BuildSlave): make it possible to use
5231 something other than 'Bot' for the Bot object, to make certain
5232 test cases easier to write.
5233 (BuildSlave.waitUntilDisconnected): utility method for testing
5235 2004-11-30 Brian Warner <warner@lothar.com>
5237 * buildbot/test/test_run.py (RunMixin): refactor, remove debug msg
5239 * buildbot/interfaces.py (IBuilderControl.ping): add timeout=
5240 argument, return a Deferred that always fires with True or False.
5241 I don't use an errback to indicate 'ping failed' so that callers
5242 are free to ignore the deferred without causing spurious errors in
5244 * buildbot/process/builder.py (BuilderControl.ping): implement it
5246 * buildbot/test/test_run.py (Status.testDisappear): test ping
5247 (Status.disappearSlave): fix it
5249 2004-11-30 Brian Warner <warner@lothar.com>
5251 * buildbot/interfaces.py (IBuildControl): add .stopBuild
5252 (IBuilderControl): add .getBuild(num), only works for the current
5253 build, of course, although it might be interesting to offer
5254 something for builds in the .waiting or .interlocked state.
5256 * buildbot/process/base.py (Build): have .stopBuild just do the
5257 interrupt, then let the build die by itself.
5258 (BuildControl): add .stopBuild, and add a point-event named
5259 'interrupt' just after the build so status viewers can tell that
5261 (BuilderControl): add .getBuild
5263 * buildbot/process/step.py (Dummy): use haltOnFailure so it really
5264 stops when you kill it, good for testing
5265 (ShellCommand.interrupt): add a logfile named 'interrupt' which
5266 contains the 'reason' text.
5268 * buildbot/status/html.py: Add Stop Build button, if the build can
5269 still be stopped. Send a Redirect (to the top page) one second
5270 later, hopefully long enough for the interrupt to have an effect.
5271 Move make_row() up to top-level to share it between Stop Build and
5274 * buildbot/slave/commands.py: only kill the child process once
5276 * buildbot/test/test_run.py: add testInterrupt
5278 2004-11-29 Brian Warner <warner@lothar.com>
5280 * buildbot/process/base.py: Refactor command interruption. The
5281 Build is now responsible for noticing that the slave has gone
5282 away: Build.lostRemote() interrupts the current step and makes
5283 sure that no further ones will be started.
5285 * buildbot/process/builder.py: When the initial remote_startBuild
5286 message fails, log it: this usually indicates that the slave has
5287 gone away, but we don't really start paying attention until they
5288 fail to respond to the first step's command.
5290 * buildbot/process/step.py (RemoteCommand): Does *not* watch for
5291 slave disconnect. Now sports a new interrupt() method. Error
5292 handling was simplified a lot by chaining deferreds, so
5293 remoteFailed/remoteComplete were merged into a single
5294 remoteComplete method (which can now get a Failure object).
5295 Likewise failed/finished were merged into just _finished.
5296 (BuildStep): Add interrupt(why) method, and if why is a
5297 ConnectionLost Failure then the step is failed with some useful
5300 * buildbot/slave/bot.py: stop the current command when the remote
5301 Step reference is lost, and when the slave is shut down.
5302 (Bot): make it a MultiService, so it can have children. Use
5303 stopService to tell when the slave is shutting down.
5304 (SlaveBuilder): make it a Service, and a child of the Bot. Add
5305 remote_interruptCommand (which asks the current SlaveCommand to
5306 stop but allows it to keep emitting status messages), and
5307 stopCommand (which tells it to shut up and die).
5309 * buildbot/slave/commands.py: make commands interruptible
5310 (ShellCommand.kill): factor out os.kill logic
5311 (Command): factor out setup()
5312 (Command.sendStatus): don't send status if .running is false, this
5313 happens when the command has been halted.
5314 (Command.interrupt): new method, used to tell the command to die
5315 (SlaveShellCommand): implement .interrupt
5316 (DummyCommand): implement .interrupt
5317 (SourceBase, etc): factor out setup(), don't continue substeps if
5320 * buildbot/status/builder.py: fix all waitUntilFinished() methods
5321 so they can be called after finishing
5323 * buildbot/test/test_run.py: new tests for disconnect behavior,
5324 refactor slave-shutdown routines, add different kinds of
5327 2004-11-27 Brian Warner <warner@lothar.com>
5329 * buildbot/status/words.py (IrcStatusBot.convertTime): utility
5330 method to express ETA time like "2m45s" instead of "165 seconds"
5332 2004-11-24 Brian Warner <warner@lothar.com>
5334 * buildbot/test/test_vc.py (VC.testArch): unregister the test
5335 archive after the test completes, to avoid cluttering the user's
5336 'tla archives' listing with a bogus entry. Arch doesn't happen to
5337 provide any way to override the use of ~/.arch-params/, so there
5338 isn't a convenient way to avoid touching the setup of the user who
5340 (VC_HTTP.testArchHTTP): same
5342 2004-11-23 Brian Warner <warner@lothar.com>
5344 * buildbot/status/html.py (TextLog): split render() up into
5345 render_HEAD and render_GET. Use a Producer when sending log
5346 chunks, to reduce memory requirements and avoid sending huge
5347 non-Banana-able strings over web.distrib connections. Requires
5348 peeking under the covers of IStatusLog.
5349 (TextLog.resumeProducing): fix the "as text" link, handle client
5350 disconnects that occur while we're still sending old chunks.
5352 * buildbot/status/builder.py (HTMLLogFile.waitUntilFinished): oops,
5353 use defer.succeed, not the non-existent defer.success
5354 (LogFile.waitUntilFinished): same
5355 (LogFile.subscribe): don't add watchers to a finished logfile
5357 * buildbot/__init__.py (version): bump to 0.6.1+ while between
5360 2004-11-23 Brian Warner <warner@lothar.com>
5362 * buildbot/__init__.py (version): Releasing buildbot-0.6.1
5364 2004-11-23 Brian Warner <warner@lothar.com>
5366 * NEWS: update for the 0.6.1 release
5367 * MANIFEST.in: add new files
5369 * README (INSTALLATION): explain how to enable the extra VC tests
5371 * buildbot/status/builder.py (LogFile): add .runEntries at the class
5372 level to, so old pickled builds can be displayed ok
5374 2004-11-22 Brian Warner <warner@lothar.com>
5376 * NEWS: summarize updates since last release
5378 * README (SLAVE): fix usage of 'buildbot slave' command. Thanks to
5379 Yoz Grahame. Closes SF#1050138.
5381 * docs/changes.xhtml (FreshCVSSourceNewcred): fix typo. Closes
5384 * buildbot/process/step_twisted.py (Trial): update docs a bit
5386 * docs/factories.xhtml: fix Trial factory docs to match reality.
5389 * buildbot/process/factory.py (Trial.__init__): add args for
5390 randomly= and recurse=, making them available to instantiators
5391 instead of only to subclassers. Closes: SF#1049759.
5393 2004-11-15 Brian Warner <warner@lothar.com>
5395 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
5396 try to teach the Quick factory to use multiple versions of python
5398 2004-11-12 Brian Warner <warner@lothar.com>
5400 * buildbot/status/builder.py (BuilderStatus.saveYourself): use a
5401 safer w32-compatible approach, and only use it on windows
5402 (BuildStatus.saveYourself): same
5404 2004-11-11 Brian Warner <warner@lothar.com>
5406 * buildbot/status/builder.py (LogFile.addEntry): smarter way to do
5407 it: one string merge per chunk. There are now separate .entries
5408 and .runEntries lists: when enumerating over all chunks, make sure
5410 * buildbot/test/test_status.py (Log): more tests
5412 * buildbot/status/builder.py (LogFile.addEntry): Merge string
5413 chunks together, up to 10kb per chunk. This ought to cut down on
5414 the CPU-burning overhead of large log files. Thanks to Alexander
5415 Staubo for spotting the problem.
5416 * buildbot/test/test_status.py (Log): tests for same
5418 2004-11-10 Brian Warner <warner@lothar.com>
5420 * buildbot/status/mail.py (MailNotifier.buildMessage): add a Date
5421 header to outbound mail
5422 * buildbot/test/test_status.py (Mail.testBuild1): test for same
5424 2004-11-08 Brian Warner <warner@lothar.com>
5426 * buildbot/status/builder.py (BuilderStatus.saveYourself): w32
5427 can't do os.rename() onto an existing file, so catch the exception
5428 and unlink the target file first. This introduces a slight window
5429 where the existing file could be lost, but the main failure case
5430 (disk full) should still be handled safely.
5431 (BuildStatus.saveYourself): same
5433 * buildbot/changes/pb.py (ChangePerspective): use a configurable
5434 separator character instead of os.sep, because the filenames being
5435 split here are coming from the VC system, which can have a
5436 different pathname convention than the local host. This should
5437 help a buildmaster running on windows that uses a CVS repository
5438 which runs under unix.
5439 * buildbot/changes/mail.py (MaildirSource): same, for all parsers
5441 * buildbot/process/step_twisted.py (Trial.createSummary): survive
5442 when there are no test failures to be parsed
5444 * buildbot/scripts/runner.py (createMaster): use shutil.copy()
5445 instead of the unix-specific os.system("cp"), thanks to Elliot
5446 Murphy for this and the other buildbot-vs-windows catches.
5447 * buildbot/test/test_maildir.py (MaildirTest.deliverMail): same
5449 * contrib/windows/buildbot.bat: prefix a '@', apparently to not
5450 echo the command as it is run
5452 * setup.py: install sample.mk too, not just sample.cfg
5453 (scripts): install contrib/windows/buildbot.bat on windows
5455 2004-11-07 Brian Warner <warner@lothar.com>
5457 * buildbot/process/builder.py (Builder._detached): clear the
5458 self.currentBuild reference, otherwise the next build will be
5459 skipped because we think the Builder is already in use.
5461 * docs/examples/twisted_master.cfg: update to match current usage
5462 on the Twisted buildbot
5464 2004-10-29 Brian Warner <warner@lothar.com>
5466 * buildbot/status/mail.py (MailNotifier): fix typo in docs
5468 2004-10-28 Brian Warner <warner@lothar.com>
5470 * buildbot/slave/commands.py (SourceBase): refactor subclasses to
5471 have separate doVCUpdate/doVCFull methods. Catch an update failure
5472 and respond by clobbering the source directory and re-trying. This
5473 will handle local changes (like replacing a file with a directory)
5474 that will cause CVS and SVN updates to fail.
5475 * buildbot/test/test_vc.py (SetupMixin.do_vc): test the same
5477 * buildbot/process/step.py (LoggedRemoteCommand.__repr__): avoid a
5480 2004-10-19 Brian Warner <warner@lothar.com>
5482 * buildbot/process/step_twisted.py (Trial.createSummary): bugfixes
5484 * buildbot/status/html.py (StatusResourceTestResults): display any
5485 TestResults that the Build might have
5486 (StatusResourceTestResult): and the logs for each TestResult
5487 (StatusResourceBuild): add link from the per-build page
5489 2004-10-15 Brian Warner <warner@lothar.com>
5491 * buildbot/process/step_twisted.py (Trial.createSummary): parse
5492 the 'problems' portion of stdout, add TestResults to our build
5493 * buildbot/test/test_twisted.py (Parse.testParse): test it
5495 * buildbot/interfaces.py (IBuildStatus.getTestResults): new method
5496 to retrieve a dict of accumulated test results
5497 (ITestResult): define what a single test result can do
5498 * buildbot/status/builder.py (TestResult): implement ITestResult
5499 (BuildStatus.getTestResults): retrieve dict of TestResults
5500 (BuildStatus.addTestResult): add TestResults
5501 * buildbot/test/test_status.py (Results.testAddResults): test it
5503 2004-10-14 Brian Warner <warner@lothar.com>
5505 * buildbot/test/test_maildir.py (MaildirTest): use shutil.rmtree
5506 instead of os.system("rm -rf") for win32 portability
5508 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): use
5509 SignalMixin instead of starting/stopping the reactor, which is
5510 likely to cause problems with other tests
5512 * buildbot/slave/commands.py (SourceBase.doCopy): remove leftover
5513 self.copyComplete() call. Yoz Grahame makes the catch.
5515 * contrib/windows/buildbot.bat: helper script to deal with path
5516 issues. Thanks to Yoz Grahame.
5518 * buildbot/master.py (BuildMaster.startService): don't register a
5519 SIGHUP handler if the signal module has no SIGHUP attribute.
5520 Apparently win32 does this.
5522 * buildbot/scripts/runner.py (start): add --reactor=win32 on win32
5524 * buildbot/test/test_web.py (WebTest.test_webPathname): skip the
5525 test if the reactor can't offer UNIX sockets
5527 * buildbot/status/html.py (StatusResourceBuild.body): fix syntax
5528 error introduced in the last commit. We really need that
5531 2004-10-12 Brian Warner <warner@lothar.com>
5533 * buildbot/changes/mail.py (MaildirSource.describe): fix exception
5534 when describing a maildir source. Thanks to Stephen Davis.
5536 * buildbot/status/words.py (IrcStatusBot.command_WATCH): round off
5539 * buildbot/scripts/runner.py (createMaster): install Makefile too
5540 (start): add --no_save to 'start' command
5541 * buildbot/scripts/sample.mk: simple convenience Makefile with
5542 start/stop/reload targets
5544 * buildbot/__init__.py (version): bump to 0.6.0+ while between
5547 2004-09-30 Brian Warner <warner@lothar.com>
5549 * setup.py: Releasing buildbot-0.6.0
5551 2004-09-30 Brian Warner <warner@lothar.com>
5553 * MANIFEST.in: add debian/*, sample.cfg, more docs files. Remove
5554 test_trial.py from the source tarball until support is complete.
5556 * NEWS: update for 0.6.0 release
5557 * buildbot/__init__.py (version): same
5560 * buildbot/status/words.py (IrcStatusBot.command_SOURCE): add
5561 'source' command to tell users where to get the Buildbot source
5563 * docs/examples/*.cfg: update to modern standards
5565 * NEWS: update for release
5567 * buildbot/scripts/runner.py (createMaster): remove the
5568 -shutdown.tap stuff now that it isn't necessary
5570 (start): launch buildbot.tap, not buildbot-shutdown.tap
5573 * buildbot/status/mail.py (Domain): shorten class name
5574 (MailNotifier): if lookup= is a string, pass it to Domain()
5575 * buildbot/test/test_status.py (Mail.testBuild1): new class name
5576 (Mail.testBuild2): test the string-to-Domain shortcut
5577 (Mail.testMail): fix test
5580 * buildbot/scripts/sample.cfg: improve the build-the-buildbot
5583 * buildbot/status/builder.py (BuildStatus.__setstate__): re-set
5584 more attributes on load
5585 (BuilderStatus.stubBuildCacheSize): bump to 30, this was too low
5586 to accomodate the whole waterfall page at once, and the thrashing
5587 results in a lot of unnecessary loads
5588 (BuildStatus.saveYourself): use binary pickles, not fluffy text
5589 (BuilderStatus.saveYourself): same
5590 (BuilderStatus.eventGenerator): stop generating on the first missing
5591 build. We assume that saved builds are deleted oldest-first.
5592 (BuildStepStatus.__getstate__): .progress might not exist
5594 * buildbot/changes/changes.py (ChangeMaster): make it
5595 serializable, in $masterdir/changes.pck
5596 (ChangeMaster.stopService): save on shutdown
5597 * buildbot/master.py (BuildMaster.loadChanges): load at startup
5598 * buildbot/test/test_config.py: load Changes before config file
5601 * buildbot/slave/commands.py (ShellCommand.doTimeout): put the
5602 "Oh my god, you killed the command" header on a separate line
5604 * buildbot/status/builder.py (BuilderStatus.getStubBuildByNumber):
5605 skip over corrupted build pickles
5606 (BuilderStatus.getFullBuildByNumber): same
5607 (BuilderStatus.eventGenerator): skip over unavailable builds
5608 (BuildStatus.saveYourself): save builds to a .tmp file first, then
5609 do an atomic rename. This prevents a corrupted pickle when some
5610 internal serialization error occurs.
5611 (BuilderStatus.saveYourself): same
5613 * buildbot/slave/commands.py (SlaveShellCommand): oops, restore
5614 the timeout for shell commands, it got lost somehow
5616 * buildbot/status/builder.py (BuilderStatus.eventGenerator): if we
5617 run out of build steps, return the rest of the builder events
5619 * buildbot/interfaces.py (IBuilderControl.ping): add method
5621 * buildbot/process/builder.py (BuilderControl.ping): move
5622 slave-ping to BuilderControl, and fix the failure case in the
5623 process (Event.finish() is the verb, Event.finished is the noun).
5625 * buildbot/status/html.py (StatusResourceBuilder.ping): ping
5626 through the BuilderControl instead of the BuilderStatus
5627 (EventBox): add adapter for builder.Event, allowing builder events to
5628 be displayed in the waterfall display
5630 * buildbot/master.py (BotMaster.stopService): add a 'master
5631 shutdown' event to the builder's log
5632 (BuildMaster.startService): and a 'master started' on startup
5634 * buildbot/status/builder.py (BuilderStatus.eventGenerator): merge
5635 builder events into the BuildStep event stream
5636 (Status.builderAdded): add a 'builder created' event
5639 * buildbot/status/words.py (IrcStatusBot.command_WATCH): new
5640 command to announce the completion of a running build
5641 (IrcStatusBot.command_FORCE): announce when the build finishes
5643 * buildbot/status/builder.py (BuilderStatus.addFullBuildToCache):
5644 don't evict unfinished builds from the cache: they must stay in
5645 the full-cache until their logfiles have stopped changing. Make
5646 sure the eviction loop terminates if an unfinished build was hit.
5647 (HTMLLogFile.getTextWithHeaders): return HTML as if it were text.
5648 This lets exceptions be dumped in an email status message. Really
5649 we need LogFiles which contain both text and HTML, instead of two
5651 (BuildStatus.__getstate__): handle self.finished=False
5652 (Status.builderAdded): if the pickle is corrupted, abandon the
5653 history and create a new BuilderStatus object.
5655 * buildbot/process/base.py (Build.stopBuild): tolerate lack of a
5656 self.progress attribute, helped one test which doesn't fully set
5657 up the Build object.
5659 * buildbot/interfaces.py (IStatusLogStub): split out some of the
5660 IStatusLog methods into an Interface that is implemented by "stub"
5661 logs, for which all the actual text chunks are on disk (in the
5662 pickled Build instance). To show the log contents, you must first
5663 adapt the stub log to a full IStatusLog object.
5665 * buildbot/status/builder.py (LogFileStub): create separate stub
5666 log objects, which can be upgraded to a real one if necessary.
5667 (LogFile): make them persistable, and let them stubify themselves
5669 (BuildStepStatus): same
5671 (BuildStatus.saveYourself): save the whole build out to disk
5672 (BuilderStatus): make it persistable
5673 (BuilderStatus.saveYourself): save the builder to disk
5674 (BuilderStatus.addFullBuildToCache): implement two caches which
5675 hold Build objects: a small one which holds full Builds, and a
5676 larger one which holds "stubbed" Builds (ones with their LogFiles
5677 turned into LogFileStubs). This reduces memory usage by the
5678 buildmaster by not keeping more than a few (default is 2) whole
5679 build logs in RAM all the time.
5680 (BuilderStatus.getBuild): rewrite to pull from disk (through the
5682 (BuilderStatus.eventGenerator): rewrite since .builds went away
5683 (BuilderStatus.buildStarted): remove the .builds array. Add the
5684 build to the "full" cache when it starts.
5685 (BuilderStatus._buildFinished): save the build to disk when it
5687 (Status): give it a basedir (same as the BuildMaster's basedir)
5688 where the builder pickles can be saved
5689 (Status.builderAdded): create the BuilderStatus ourselves, by
5690 loading a pickle from disk (or creating a new instance if there
5691 was none on disk). Return the BuilderStatus so the master can glue
5692 it into the new Builder object.
5694 * buildbot/master.py (BotMaster.stopService): on shutdown, tell
5695 all BuilderStatuses to save themselves out to disk. This is in
5696 lieu of saving anything important in the main Application pickle
5697 (the -shutdown.tap file).
5698 (BuildMaster.__init__): give Status() a basedir for its files
5699 (BuildMaster.loadConfig_Builders): do status.builderAdded first,
5700 to get the BuilderStatus, then give it to the Builder (instead of
5701 doing it the other way around). It's ok if the status announces
5702 the new Builder before it's really ready, as the outside world can
5703 only see the BuilderStatus object anyway (and it is ready before
5704 builderAdded returns). Use the builder's "builddir" (which
5705 normally specifies where the slave will run the builder) as the
5706 master's basedir (for saving serialized builds).
5708 * buildbot/status/html.py (StatusResourceBuildStep.getChild):
5709 coerce the logfile to IStatusLog before trying to get the text
5710 chunks out of it. This will pull the full (non-stubified) Build in
5711 from disk if necessary.
5712 (TextLog): fix the adapter registration
5714 * buildbot/test/test_control.py (Force.setUp): create the basedir
5715 * buildbot/test/test_web.py: same
5716 * buildbot/test/test_vc.py (SetupMixin.setUp): same
5717 * buildbot/test/test_status.py (Mail.makeBuild): match new setup
5718 * buildbot/test/test_run.py (Run.testMaster): same
5719 (Status.setUp): same
5721 2004-09-29 Fred L. Drake, Jr. <fdrake@acm.org>
5723 * buildbot/status/html.py (Waterfall.__init__): store actual
5724 allowForce flag passed in rather than using True for everyone;
5725 make sure setting it to False doesn't cause a NameError
5727 (StatusResourceBuilder.__init__) add the builder name to the page
5729 (StatusResourceBuilder.body) move HTML generation for a name/value
5730 row into a helper method (StatusResourceBuilder.make_row); only
5731 generate the "Force Build" form if allowForce was True and the
5732 slave is connected. Use class attributes in the generated HTML to
5733 spread a little CSS-joy.
5735 2004-09-28 Brian Warner <warner@lothar.com>
5737 * buildbot/process/step_twisted.py (Trial.createSummary): fix
5738 warning-scanner to not ignore things like
5739 'ComponentsDeprecationWarning' and 'exceptions.RuntimeWarning'
5741 * buildbot/status/html.py (StatusResource.control): add some
5742 class-level values for .control in an attempt to make upgrading
5745 * buildbot/util.py (ComparableMixin): survive missing attributes,
5746 such as when a class is modified and we're comparing old instances
5749 * buildbot/status/words.py (IrcStatusBot.privmsg): clean up
5750 failure handling, remove a redundant try/except block. Don't
5751 return the full traceback to the IRC channel.
5752 (IrcStatusBot.command_FORCE): catch new exceptions, return useful
5753 error messages. Get ETA properly.
5755 * buildbot/status/html.py (StatusResourceBuild.body): html.escape
5756 the reason, since (at least) IRC message will have <> in them.
5757 (StatusResourceBuilder.__init__): take an IBuilderControl
5758 (StatusResourceBuilder.force): use the IBuilderControl we get in
5759 the constructor instead of trying to make our own. Catch the
5760 new exceptions and ignore them for now (until we make an
5761 intermediate web page where we could show the error message)
5762 (StatusResource): create with an IControl, use it to give an
5763 IBuilderControl to all children
5764 (Waterfall): take an allowForce= option, pass an IControl object
5765 to StatusResource if it is True
5767 * buildbot/test/test_web.py (ConfiguredMaster): handle IControl
5769 * buildbot/master.py (BotPerspective.perspective_forceBuild):
5770 catch new exceptions and return string forms
5772 * buildbot/interfaces.py: add NoSlaveError, BuilderInUseError
5773 * buildbot/process/builder.py (Builder.forceBuild): raise them
5774 * buildbot/test/test_control.py (Force.testNoSlave): new test
5775 (Force.testBuilderInUse): same
5778 * buildbot/status/words.py (IrcStatusBot): enable build-forcing
5780 * buildbot/test/test_run.py: use IControl
5781 * buildbot/test/test_vc.py: same
5783 * buildbot/status/html.py (StatusResourceBuilder.force): rewrite
5784 to use IControl. Still offline.
5785 * buildbot/status/words.py (IrcStatusBot.command_FORCE): same
5787 * buildbot/process/builder.py (Builder.doPeriodicBuild): set
5788 who=None so periodic builds don't send out status mail
5789 (Builder.forceBuild): include reason in the log message
5790 (BuilderControl.forceBuild): rename 'name' to 'who'
5792 * buildbot/master.py (BotPerspective.perspective_forceBuild): add
5793 'who' parameter, but make it None by default so builds forced by
5794 slave admins don't cause status mail to be sent to anybody
5795 (BotMaster.forceBuild): same. this method is deprecated.
5796 (DebugPerspective.perspective_forceBuild): same, use IControl.
5797 (DebugPerspective.perspective_fakeChange): use IControl..
5798 (Dispatcher.requestAvatar): .. so don't set .changemaster
5800 * buildbot/interfaces.py (IBuilderControl.forceBuild): rename 'who'
5801 parameter to avoid confusion with the name of the builder
5804 * buildbot/status/mail.py: refine comment about needing 2.3
5806 * buildbot/status/html.py: move all imports to the top
5808 * buildbot/test/test_control.py: test new interfaces
5809 * buildbot/test/test_run.py (Status): handle new interfaces
5810 * buildbot/test/test_vc.py (SetupMixin.doBuild): same
5812 * buildbot/process/base.py (BuildControl): implement IBuildControl
5813 and its lonely getStatus() method
5815 * buildbot/process/builder.py (BuilderControl): implement
5816 IBuilderControl, obtained by adapting the Builder instance
5817 (Builder.startBuild): return a BuilderControl instead of a
5818 Deferred. The caller can use bc.getStatus().waitUntilFinished() to
5819 accomplish the same thing.
5821 * buildbot/master.py: move all import statements to the top
5822 (Control): implement IControl, obtained by adapting the
5823 BuildMaster instance.
5825 * buildbot/interfaces.py: add IControl, IBuilderControl, and
5826 IBuildControl. These are used to force builds. Eventually they
5827 will provide ways to reconfigure the Builders, pause or abandon a
5828 Build, and perhaps control the BuildMaster itself.
5830 2004-09-26 Brian Warner <warner@lothar.com>
5832 * buildbot/util.py (ComparableMixin): survive twisted>1.3.0 which
5833 ends up comparing us against something without a .__class__
5835 2004-09-24 Brian Warner <warner@lothar.com>
5837 * buildbot/scripts/runner.py: rearrange option parsing a lot, to get
5840 * Makefile: add 'deb-snapshot' target, to create a timestamped
5843 * debian/rules (binary-indep): skip CVS/ files in dh_installexamples
5845 2004-09-23 Brian Warner <warner@lothar.com>
5847 * buildbot/__init__.py (version): move version string here
5848 * setup.py: get version string from buildbot.version
5849 * buildbot/status/html.py (WaterfallStatusResource.body): add
5850 buildbot version to the page footer
5851 * buildbot/status/words.py (IrcStatusBot.command_VERSION): provide
5854 * buildbot/master.py (BotMaster.getPerspective): detect duplicate
5855 slaves, let the second know where the first one is coming from
5856 (BuildMaster.__init__): turn on .unsafeTracebacks so the slave can
5857 see our exceptions. It would be nice if there were a way to just
5858 send them the exception type and value, not the full traceback.
5861 * buildbot/status/mail.py (MailNotifier): add a new argument
5862 sendToInterestedUsers=, which can be set to False to disable the
5863 usual send-to-blamelist behavior.
5864 (top): handle python-2.2 which has no email.MIMEMultipart
5865 (MailNotifier.buildMessage): don't send logs without MIMEMultipart
5866 (MailNotifier.disownServiceParent): unsubscribe on removal
5868 * buildbot/test/test_status.py (Mail.testBuild2): test it
5871 * buildbot/status/progress.py (Expectations.wavg): tolerate
5872 current=None, which happens when steps start failing badly
5873 * buildbot/test/test_status.py (Progress.testWavg): test for it
5875 * buildbot/process/step.py (SVN.startVC): when the (old) slave
5876 doesn't understand args['revision'], emit a warning instead of
5877 bailing completely. Updating to -rHEAD is probably close enough.
5879 * buildbot/process/step_twisted.py (Trial.start): fix sanity-check
5881 * buildbot/test/test_status.py: at least import bb.status.client
5882 even if we don't have any test coverage for it yet
5884 * contrib/svn_buildbot.py: don't require python2.3
5885 (main): wait, do require it (for sets.py), but explain how to
5886 make it work under python2.2
5888 2004-09-23 Brian Warner <warner@lothar.com>
5890 * contrib/svn_buildbot.py: include the revision number in the Change
5892 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): use when=,
5893 using util.now() because FreshCVS is a realtime service
5895 * buildbot/status/event.py: delete dead code
5896 * buildbot/process/step.py: don't import dead Event class
5897 * buildbot/process/step_twisted.py: same
5898 * buildbot/status/builder.py: same
5899 * buildbot/status/client.py: same
5901 * buildbot/test/test_process.py: kill buggy out-of-date disabled test
5903 * buildbot/changes/changes.py (Change): set .when from an __init__
5904 argument (which defaults to now()), rather than having
5905 ChangeMaster.addChange set it later.
5906 (ChangeMaster.addChange): same
5908 * buildbot/changes/mail.py (parseFreshCVSMail): pass in when=
5909 (parseSyncmail): same. Just use util.now() for now.
5910 (parseBonsaiMail): parse the timestamp field for when=
5912 * buildbot/test/test_vc.py (SourceStamp.addChange): page in when=
5913 instead of setting .when after the fact
5917 * buildbot/slave/trial.py: new SlaveCommand to machine-parse test
5918 results when the target project uses retrial. Still under
5920 * buildbot/test/test_trial.py: same
5922 2004-09-21 Brian Warner <warner@lothar.com>
5924 * buildbot/status/mail.py (MailNotifier.__init__): include
5925 success/warnings/failure in the Subject line
5926 (MailNotifier.buildMessage): add the buildbot's URL to the body,
5927 use step.logname for the addLogs=True attachment filenames
5928 * buildbot/test/test_status.py (Mail): test Subject lines
5929 (Mail.testLogs): test attachment filenames
5931 * buildbot/master.py (DebugPerspective.perspective_fakeChange):
5932 accept a 'who' argument from the debug tool
5933 * contrib/debugclient.py (DebugWidget.do_commit): send 'who'
5934 * contrib/debug.glade: add text box to set 'who'
5936 * buildbot/interfaces.py (IBuildStatus.getBuilder): replace
5937 .getBuilderName with .getBuilder().getName(), more flexible
5938 (IStatusLog.getName): logs have short names, but you can prefix
5939 them with log.getStep().getName() to make them more useful
5940 * buildbot/status/builder.py: same
5941 * buildbot/status/client.py: same
5942 * buildbot/status/html.py: same
5943 * buildbot/test/test_run.py (Status.testSlave): same
5944 * buildbot/process/step.py: tweak logfile names
5946 * buildbot/status/mail.py (MailNotifier): add lookup, change
5947 argument to extraRecipients. The notifier is now aimed at sending
5948 mail to the people involved in a particular build, with additional
5949 constant recipients as a secondary function.
5951 * buildbot/test/test_status.py: add coverage for IEmailLookup,
5952 including slow-lookup and failing-lookup. Make sure the blamelist
5953 members are included.
5955 * buildbot/interfaces.py: new interfaces IEmailSender+IEmailLookup
5956 (IBuildStatus.getResponsibleUsers): rename from getBlamelist
5957 (IBuildStatus.getInterestedUsers): new method
5958 * buildbot/status/builder.py (BuildStatus.getResponsibleUsers): same
5959 * buildbot/status/client.py (remote_getResponsibleUsers): same
5960 * buildbot/status/html.py (StatusResourceBuild.body): same
5961 * buildbot/test/test_run.py (Status.testSlave): same
5963 2004-09-20 Brian Warner <warner@lothar.com>
5965 * docs/users.xhtml: update concepts
5967 * Makefile: add a convenience makefile, for things like 'make
5968 test'. It is not included in the source tarball.
5970 2004-09-16 Brian Warner <warner@lothar.com>
5972 * NEWS: mention /usr/bin/buildbot, debian/*
5974 * debian/*: add preliminary debian packaging. Many thanks to
5975 Kirill Lapshin (and Kevin Turner) for the hard work. I've mangled
5976 it considerably since it left their hands, I am responsible for
5977 all breakage that's resulted.
5979 * bin/buildbot: create a top-level 'buildbot' command, to be
5980 installed in /usr/bin/buildbot . For now it's just a simple
5981 frontend to mktap/twistd/kill, but eventually it will be the entry
5982 point to the 'try' command and also a status client. It is also
5983 intended to support the upcoming debian-packaging init.d scripts.
5984 * buildbot/scripts/runner.py: the real work is done here
5985 * buildbot/scripts/__init__.py: need this too
5986 * buildbot/scripts/sample.cfg: this is installed in new
5987 buildmaster directories
5988 * setup.py: install new stuff
5990 2004-09-15 Brian Warner <warner@lothar.com>
5992 * buildbot/test/test_vc.py: skip SVN tests if svn can't handle the
5993 'file:' schema (the version shipped with OS-X was built without the
5995 (SetupMixin.tearDown): stop the goofy twisted.web timer which
5996 updates the log-timestamp, to make sure it isn't still running after
5999 * docs/config.xhtml: Add projectName, projectURL, buildbotURL
6000 values to the config file.
6001 * docs/examples/hello.cfg: add examples
6002 * buildbot/interfaces.py (IStatus.getBuildbotURL): define accessors
6003 * buildbot/status/builder.py (Status.getProjectURL): implement them
6004 * buildbot/master.py (BuildMaster.loadConfig): set them from config
6005 * buildbot/test/test_config.py (ConfigTest.testSimple): test them
6006 * buildbot/status/html.py (WaterfallStatusResource): display them
6009 * buildbot/test/test_vc.py (FakeBuilder.name): add attribute so
6010 certain error cases don't suffer a secondary exception.
6011 (top): Skip tests if the corresponding VC tool is not installed.
6013 * buildbot/process/factory.py (Trial): introduce separate
6014 'buildpython' and 'trialpython' lists, since trialpython=[] is
6015 what you want to invoke /usr/bin/python, whereas ./setup.py is
6016 less likely to be executable. Add env= parameter to pass options
6017 to test cases (which is how I usually write tests, I don't know if
6018 anyone else does it this way).
6020 * buildbot/process/step_twisted.py (Trial): handle python=None.
6021 Require 'testpath' be a string, not a list. Fix tests= typo.
6022 (Trial.start): sanity-check any PYTHONPATH value for stringness.
6024 * buildbot/process/step.py (RemoteCommand._remoteFailed): goofy
6025 way to deal with the possibility of removing the disconnect notify
6027 (CVS): add a 'login' parameter to give a password to 'cvs login',
6028 commonly used with pserver methods (where pw="" or pw="guest")
6030 * buildbot/slave/commands.py (SourceBase): move common args
6031 extraction and setup() to __init__, so everything is ready by the
6032 time setup() is called
6033 (CVS.start): call 'cvs login' if a password was supplied
6034 (ShellCommand): special-case PYTHONPATH: prepend the master's
6035 value to any existing slave-local value.
6037 * buildbot/process/builder.py (Builder.updateBigStatus): if we
6038 don't have a remote, mark the builder as Offline. This whole
6039 function should probably go away and be replaced by individual
6041 (Builder.buildFinished): return the results to the build-finished
6042 deferred callback, helps with testing
6044 2004-09-14 Brian Warner <warner@lothar.com>
6046 * buildbot/test/test_vc.py: put all the repositories needed to run
6047 the complete tests into a single small (1.3MB) tarball, so I can
6048 make that tarball available on the buildbot web site. Test HTTP
6049 access (for Arch and Darcs) by spawning a temporary web server
6050 while the test runs.
6052 * docs/users.xhtml: new document, describe Buildbot's limited
6053 understanding of different human users
6055 * buildbot/test/test_vc.py: rearrange test cases a bit
6057 * buildbot/process/step_twisted.py (Trial): handle testpath=
6058 * buildbot/process/factory.py (Trial): update to use step.Trial
6060 * buildbot/slave/commands.py (ShellCommandPP): fix fatal typo
6062 * buildbot/status/builder.py (BuildStatus.getText): add text2 to
6063 the overall build text (which gives you 'failed 2 tests' rather
6065 (BuildStepStatus.text2): default to [], not None
6067 * buildbot/process/step_twisted.py (Trial.commandComplete): text2
6070 2004-09-12 Brian Warner <warner@lothar.com>
6072 * buildbot/master.py (BotPerspective._commandsUnavailable): don't
6073 log the whole exception if it's just an AttributeError (old slave)
6075 * buildbot/process/step.py (ShellCommand.__init__): stash .workdir
6076 so (e.g.) sub-commands can be run in the right directory.
6077 (ShellCommand.start): accept an optional errorMessage= argument
6078 to make life easier for SVN.start
6079 (SVN.startVC): put the "can't do mode=export" warning in the LogFile
6081 (ShellCommand.start): move ['dir'] compatibility hack..
6082 (RemoteShellCommand.start): .. to here so everyone can use it
6084 * buildbot/process/step_twisted.py (Trial): use .workdir
6086 * buildbot/process/step_twisted.py (BuildDebs.getText): fix the
6087 text displayed when debuild fails completely
6088 (Trial): snarf _trial_temp/test.log from the slave and display it
6090 2004-09-11 Brian Warner <warner@lothar.com>
6092 * buildbot/process/step_twisted.py (ProcessDocs.getText): typo
6094 * buildbot/process/process_twisted.py (TwistedTrial.tests): oops,
6095 set to 'twisted', so --recurse can find twisted/web/test/*, etc
6097 * buildbot/process/step.py (ShellCommand): call .createSummary
6098 before .evaluateCommand instead of the other way around. This
6099 makes it slightly easier to count warnings and then use that to
6100 set results=WARNINGS
6101 * buildbot/process/step_twisted.py: cosmetic, swap the methods
6103 * buildbot/process/base.py (Build.buildFinished): update status
6104 before doing progress. It's embarrassing for the build to be stuck
6105 in the "building" state when an exceptions occurs elsewhere..
6107 * buildbot/status/progress.py (Expectations.expectedBuildTime):
6108 python2.2 doesn't have 'sum'
6110 * buildbot/status/builder.py (Status.getBuilderNames): return a copy,
6111 to prevent clients from accidentally sorting it
6113 * buildbot/master.py (Manhole): add username/password
6114 (BuildMaster.loadConfig): use c['manhole']=Manhole() rather than
6115 c['manholePort'], deprecate old usage
6116 * docs/config.xhtml: document c['manhole']
6117 * docs/examples/hello.cfg: show example of using a Manhole
6120 * buildbot/test/test_steps.py (FakeBuilder.getSlaveCommandVersion):
6121 pretend the slave is up to date
6123 * buildbot/status/builder.py (BuildStepStatus.stepFinished): 'log',
6124 the module, overlaps with 'log', the local variable
6126 * buildbot/status/html.py: oops, 2.2 needs __future__ for generators
6128 * buildbot/process/builder.py (Builder.getSlaveCommandVersion):
6129 new method to let Steps find out the version of their
6130 corresponding SlaveCommand.
6131 * buildbot/process/step.py (BuildStep.slaveVersion): utility method
6132 (ShellCommand.start): add 'dir' argument for <=0.5.0 slaves
6133 (CVS.startVC): backwards compatibility for <=0.5.0 slaves
6135 (Darcs.startVC): detect old slaves (missing the 'darcs' command)
6136 (Arch.startVC): same
6137 (P4Sync.startVC): same
6139 * buildbot/process/step.py (LoggedRemoteCommand.start): return the
6140 Deferred so we can catch errors in remote_startCommand
6141 (RemoteShellCommand.start): same
6143 * docs/examples/twisted_master.cfg: update sample config file
6145 * buildbot/slave/commands.py (ShellCommandPP): write to stdin
6146 after connectionMade() is called, not before. Close stdin at that
6149 * buildbot/process/process_twisted.py: update to use Trial, clean
6150 up argument passing (move to argv arrays instead of string
6153 * buildbot/process/step_twisted.py (Trial): new step to replace
6154 RunUnitTests, usable by any trial-using project (not just
6155 Twisted). Arguments have changed, see the docstring for details.
6157 * buildbot/process/base.py (Build.startBuild): this now returns a
6158 Deferred. Exceptions that occur during setupBuild are now
6159 caught better and lead to fewer build_status weirdnesses, like
6160 finishing a build that was never started.
6161 (Build.buildFinished): fire the Deferred instead of calling
6162 builder.buildFinished directly. The callback argument is this
6163 Build, everything else can be extracted from it, including the
6164 new build.results attribute.
6165 * buildbot/process/builder.py (Builder.startBuild): same
6166 (Builder.buildFinished): same, extract results from build
6168 * buildbot/process/step.py (ShellCommands): remove dead code
6170 2004-09-08 Brian Warner <warner@lothar.com>
6172 * buildbot/test/test_vc.py (VC.doPatch): verify that a new build
6173 doesn't try to use the leftover patched workdir
6174 (SourceStamp): test source-stamp computation for CVS and SVN
6176 * buildbot/slave/commands.py (SourceBase.doPatch): mark the
6177 patched workdir ('touch .buildbot-patched') so we don't try to
6179 (SourceBase.start): add ['revision'] for all Source steps
6180 (CVS): change args: use ['branch'] for -r, remove ['files']
6181 (CVS.buildVC): fix revision/branch stuff
6182 (SVN): add revision stuff
6184 * buildbot/process/step.py (BuildStep.__init__): reject unknown
6185 kwargs (except 'workdir') to avoid silent spelling errors
6186 (ShellCommand.__init__): same
6187 (Source): new base class for CVS/SVN/etc. Factor out everything
6188 common, add revision computation (perform the checkout with a -D
6189 DATE or -r REVISION that gets exactly the sources described by the
6190 last Change), overridable with step.alwaysUseLatest. Add patch
6191 handling (build.getSourceStamp can trigger the use of a base
6192 revision and a patch).
6193 (CVS, SVN, Darcs, Arch, P4Sync): refactor, remove leftover arguments
6194 * docs/steps.xhtml: update docs
6195 * docs/source.xhtml: mention .checkoutDelay
6196 * docs/examples/hello.cfg: show use of checkoutDelay, alwaysUseLatest
6198 * buildbot/process/base.py (Build.setSourceStamp): add a
6199 .sourceStamp attribute to each Build. If set, this indicates that
6200 the build should be done with something other than the most
6201 recent source tree. This will be used to implement "try" builds.
6202 (Build.allChanges): new support method
6203 (Build.lastChangeTime): remove, functionality moved to Source steps
6204 (Build.setupBuild): copy the Step args before adding ['workdir'],
6205 to avoid modifying the BuildFactory (and thus triggering spurious
6209 * buildbot/status/html.py: rename s/commits/changes/
6210 (StatusResourceChanges): same
6211 (CommitBox.getBox): same, update URL
6212 (WaterfallStatusResource): same
6213 (StatusResource.getChild): same
6215 * contrib/debugclient.py (DebugWidget.do_commit): send .revision
6216 * contrib/debug.glade: add optional 'revision' to the fakeChange
6218 * buildbot/changes/changes.py (html_tmpl): display .revision
6219 (ChangeMaster.addChange): note .revision in log
6220 * buildbot/changes/pb.py (ChangePerspective.perspective_addChange):
6221 accept a ['revision'] attribute
6223 * buildbot/process/factory.py (BuildFactory): use ComparableMixin
6225 * buildbot/master.py (BotMaster.getPerspective): update the
6226 .connected flag in SlaveStatus when it connects
6227 (BotMaster.detach): and when it disconnects
6228 (DebugPerspective.perspective_fakeChange): take a 'revision' attr
6229 (BuildMaster.loadConfig_Builders): walk old list correctly
6231 * buildbot/test/test_config.py: fix prefix= usage
6233 2004-09-06 Brian Warner <warner@lothar.com>
6237 * buildbot/changes/p4poller.py (P4Source): New ChangeSource to
6238 poll a P4 depot looking for recent changes. Thanks to Dave
6239 Peticolas for the contribution. Probably needs some testing after
6242 * buildbot/process/step.py (P4Sync): simple P4 source-updater,
6243 requires manual client setup for each buildslave. Rather
6244 experimental. Thanks again to Dave Peticolas.
6245 * buildbot/slave/commands.py (P4Sync): slave-side source-updater
6247 * buildbot/changes/changes.py (Change): add a .revision attribute,
6248 which will eventually be used to generate source-stamp values.
6250 * buildbot/process/step.py (RemoteCommand.start): use
6251 notifyOnDisconnect to notice when we lose the slave, then treat it
6252 like an exception. This allows LogFiles to be closed and the build
6253 to be wrapped up normally. Be sure to remove the disconnect
6254 notification when the step completes so we don't accumulate a
6255 bazillion such notifications which will fire weeks later (when the
6256 slave finally disconnects normally). Fixes SF#915807, thanks to
6257 spiv (Andrew Bennetts) for the report.
6258 (LoggedRemoteCommand): move __init__ code to RemoteCommand, since it
6259 really isn't Logged- specific
6260 (LoggedRemoteCommand.remoteFailed): Add an extra newline to the
6261 header, since it's almost always going to be appended to an
6263 * buildbot/test/test_steps.py (BuildStep.testShellCommand1):
6264 update test to handle use of notifyOnDisconnect
6266 * buildbot/status/builder.py (BuilderStatus.currentlyOffline):
6267 don't clear .ETA and .currentBuild when going offline, let the
6268 current build clean up after itself
6270 * buildbot/process/builder.py (Builder.detached): wait a moment
6271 before doing things like stopping the current build, because the
6272 current step will probably notice the disconnect and cleanup the
6274 * buildbot/test/test_run.py (Status.tearDown): update test to
6275 handle asynchronous build-detachment
6277 * buildbot/process/base.py (Build.stopBuild): minor shuffles
6279 * buildbot/status/html.py (WaterfallStatusResource.buildGrid):
6280 hush a debug message
6282 2004-09-05 Brian Warner <warner@lothar.com>
6284 * buildbot/changes/maildir.py (Maildir.start): catch an IOError
6285 when the dnotify fcntl() fails and fall back to polling. Linux 2.2
6286 kernels do this: the fcntl module has the F_NOTIFY constant, but
6287 the kernel itself doesn't support the operation. Thanks to Olly
6288 Betts for spotting the problem.
6290 * buildbot/process/step.py (Darcs): new source-checkout command
6291 (Arch): new source-checkout command
6292 (todo_P4): fix constructor syntax, still just a placeholder
6293 * buildbot/test/test_vc.py (VC.testDarcs): test it
6294 (VC.testDarcsHTTP): same, via localhost HTTP
6296 (VC.testArchHTTP): same
6297 * NEWS: mention new features
6299 * buildbot/slave/commands.py (ShellCommand): add .keepStdout,
6300 which tells the step to stash stdout text locally (in .stdout).
6301 Slave-side Commands can use this to make decisions based upon the
6302 output of the the ShellCommand (not just the exit code).
6303 (Darcs): New source-checkout command
6304 (Arch): New source-checkout command, uses .keepStdout in one place
6305 where it needs to discover the archive's default name.
6307 * docs/steps.xhtml: Document options taken by Darcs and Arch.
6308 * docs/source.xhtml: add brief descriptions of Darcs and Arch
6309 * docs/examples/hello.cfg: add examples of Darcs and Arch checkout
6311 * buildbot/process/step.py (ShellCommand.describe): add an
6312 alternate .descriptionDone attribute which provides descriptive
6313 text when the step is complete. .description can be ["compiling"],
6314 for use while the step is running, then .descriptionDone can be
6315 ["compile"], used alone when the step succeeds or with "failed" when
6316 it does not. Updated other steps to use the new text.
6317 * buildbot/process/step_twisted.py: same
6318 * buildbot/test/test_run.py: update tests to match
6320 2004-08-30 Brian Warner <warner@lothar.com>
6322 * buildbot/process/step.py (ShellCommand.createSummary): fix docs
6323 (CVS.__init__): send 'patch' argument to slave
6324 (CVS.start): don't create the LoggedRemoteCommand until start(),
6325 so we can catch a .patch added after __init__
6326 (SVN.__init__): add 'patch' to SVN too
6329 * buildbot/slave/commands.py (ShellCommand): add a 'stdin'
6330 argument, to let commands push data into the process' stdin pipe.
6331 Move usePTY to a per-instance attribute, and clear it if 'stdin'
6332 is in use, since closing a PTY doesn't really affect the process
6333 in the right way (in particular, I couldn't run /usr/bin/patch
6335 (SourceBase.doPatch): handle 'patch' argument
6337 * buildbot/test/test_vc.py (VC.doPatch): test 'patch' argument for
6340 * buildbot/slave/commands.py (cvs_ver): fix version-parsing goo
6341 * buildbot/slave/bot.py (Bot.remote_getCommands): send command
6343 * buildbot/master.py (BotPerspective.got_commands): get command
6344 versions from slave, give to each builder
6345 * buildbot/process/builder.py (Builder.attached): stash slave
6346 command versions in .remoteCommands
6348 * docs/steps.xhtml: bring docs in-line with reality
6350 * buildbot/process/step.py (CVS.__init__): more brutal
6351 compatibility code removal
6352 (SVN.__init__): same
6354 * buildbot/slave/commands.py (SlaveShellCommand): update docs
6355 (SlaveShellCommand.start): require ['workdir'] argument, remove
6356 the ['dir'] fallback (compatibility will come later)
6357 (SourceBase): update docs
6358 (SourceBase.start): remove ['directory'] fallback
6361 * buildbot/test/test_config.py (ConfigTest.testBuilders): update test
6362 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
6363 * buildbot/test/test_slavecommand.py (SlaveCommandTestCase): same
6365 * buildbot/process/step.py (RemoteShellCommand.__init__): add
6366 want_stdout/want_stderr. remove old 'dir' keyword (to simplify the
6367 code.. I will figure out 0.5.0-compatibility hooks later)
6369 2004-08-30 Brian Warner <warner@lothar.com>
6371 * buildbot/process/process_twisted.py: rewrite in terms of new
6372 BuildFactory base class. It got significantly shorter. Yay
6375 * buildbot/process/step_twisted.py (HLint.start): fix to make it
6376 work with the new "self.build isn't nailed down until we call
6377 step.start()" scheme: specifically, __init__ is called before the
6378 build has decided on which Changes are going in, so we don't scan
6379 build.allFiles() for .xhtml files until start()
6380 (HLint.commandComplete): use getText(), not getStdout()
6381 (RunUnitTests.start): same: don't use .build until start()
6382 (RunUnitTests.describe): oops, don't report (None) when using
6384 (RunUnitTests.commandComplete): use getText()
6385 (RunUnitTests.createSummary): same
6386 (BuildDebs.commandComplete): same
6388 * buildbot/process/step.py (RemoteShellCommand.__init__): don't
6389 set args['command'] until start(), since our BuildStep is allowed
6390 to change their mind up until that point
6391 (TreeSize.commandComplete): use getText(), not getStdout()
6393 * docs/examples/twisted_master.cfg: update to current standards
6395 * docs/factories.xhtml: update
6396 * buildbot/process/factory.py: implement all the common factories
6397 described in the docs. The Trial factory doesn't work yet, and
6398 I've probably broken all the process_twisted.py factories in the
6399 process. There are compatibility classes left in for things like
6400 the old BasicBuildFactory, but subclasses of them are unlikely to
6402 * docs/examples/glib_master.cfg: use new BuildFactories
6403 * docs/examples/hello.cfg: same
6405 * buildbot/test/test_config.py (ConfigTest.testBuilders): remove
6406 explicit 'workdir' args
6408 * buildbot/process/base.py (BuildFactory): move factories to ..
6409 * buildbot/process/factory.py (BuildFactory): .. here
6410 * buildbot/process/process_twisted.py: handle move
6411 * buildbot/test/test_config.py: same
6412 * buildbot/test/test_run.py: same
6413 * buildbot/test/test_steps.py: same
6414 * buildbot/test/test_vc.py: same
6415 * docs/factories.xhtml: same
6417 * NEWS: mention config changes that require updating master.cfg
6419 * buildbot/process/base.py (Build.setupBuild): add a 'workdir'
6420 argument to all steps that weren't given one already, pointing at
6421 the "build/" directory.
6423 * docs/examples/hello.cfg: remove explicit 'workdir' args
6425 * docs/factories.xhtml: document standard BuildFactory clases,
6426 including a bunch which are have not yet been written
6428 2004-08-29 Brian Warner <warner@lothar.com>
6430 * buildbot/interfaces.py (IBuildStepStatus.getResults): move
6431 result constants (SUCCESS, WARNINGS, FAILURE, SKIPPED) to
6432 buildbot.status.builder so they aren't quite so internal
6433 * buildbot/process/base.py, buildbot/process/builder.py: same
6434 * buildbot/process/maxq.py, buildbot/process/step.py: same
6435 * buildbot/process/step_twisted.py, buildbot/status/builder.py: same
6436 * buildbot/status/mail.py, buildbot/test/test_run.py: same
6437 * buildbot/test/test_status.py, buildbot/test/test_vc.py: same
6439 * buildbot/status/html.py (StatusResourceBuildStep): oops, update
6440 to handle new getLogs()-returns-list behavior
6441 (StatusResourceBuildStep.getChild): same
6442 (StepBox.getBox): same
6443 (WaterfallStatusResource.phase0): same
6445 * docs/source.xhtml: document how Buildbot uses version-control
6446 systems (output side: how we get source trees)
6447 * docs/changes.xhtml: rename from sources.xhtml, documents VC
6448 systems (input side: how we learn about Changes)
6450 * buildbot/master.py (Manhole): use ComparableMixin
6451 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): same
6452 * buildbot/changes/mail.py (MaildirSource): same
6453 * buildbot/status/client.py (PBListener): same
6454 * buildbot/status/html.py (Waterfall): same
6455 * buildbot/status/words.py (IRC): same
6457 * NEWS: start describing new features
6459 * buildbot/status/mail.py (MailNotifier): finish implementation.
6460 The message body is still a bit sparse.
6461 * buildbot/test/test_status.py (Mail): test it
6463 * buildbot/util.py (ComparableMixin): class to provide the __cmp__
6464 and __hash__ methods I wind up adding everywhere. Specifically
6465 intended to support the buildbot config-file update scheme where
6466 we compare, say, the old list of IStatusTargets against the new
6467 one and don't touch something which shows up on both lists.
6468 * buildbot/test/test_util.py (Compare): test case for it
6470 * buildbot/interfaces.py (IBuildStatus): change .getLogs() to
6471 return a list instead of a dict
6472 (IBuildStepStatus.getLogs): same. The idea is that steps create
6473 logs with vaguely unique names (although their uniqueness is not
6474 guaranteed). Thus a compilation step should create its sole
6475 logfile with the name 'compile', and contribute it to the
6476 BuildStatus. If a step has two logfiles, try to create them with
6477 different names (like 'test.log' and 'test.summary'), and only
6478 contribute the important ones to the overall BuildStatus.
6479 * buildbot/status/builder.py (Event.getLogs): same
6480 (BuildStepStatus): fix default .text and .results
6481 (BuildStepStatus.addLog): switch to list-like .getLogs()
6482 (BuildStepStatus.stepFinished): same
6483 (BuildStatus.text): fix default .text
6484 (BuildStatus.getLogs): temporary hack to return all logs (from all
6485 child BuildStepStatus objects). Needs to be fixed to only report
6486 the significant ones (as contributed by the steps themselves)
6487 * buildbot/test/test_run.py: handle list-like .getLogs()
6488 * buildbot/test/test_steps.py (BuildStep.testShellCommand1): same
6490 2004-08-28 Brian Warner <warner@lothar.com>
6492 * buildbot/process/builder.py (Builder.attached): serialize the
6493 attachment process, so the attach-watcher isn't called until the
6494 slave is really available. Add detached watchers too, which makes
6497 * buildbot/test/test_vc.py: test VC modes (clobber/update/etc)
6499 * buildbot/test/test_swap.py: remove dead code
6501 * buildbot/slave/commands.py (ShellCommandPP): add debug messages
6502 (ShellCommand.start): treat errors in _startCommand/spawnProcess
6503 sort of as if the command being run exited with a -1. There may
6504 still be some holes in this scheme.
6505 (CVSCommand): add 'revision' tag to the VC commands, make sure the
6506 -r option appears before the module list
6507 * buildbot/process/step.py (CVS): add 'revision' argument
6509 * buildbot/slave/bot.py (SlaveBuilder._ackFailed): catch failures
6510 when sending updates or stepComplete messages to the master, since
6511 we don't currently care whether they arrive or not. When we revamp
6512 the master/slave protocol to really resume interrupted builds,
6513 this will need revisiting.
6514 (lostRemote): remove spurious print
6516 * buildbot/master.py (BotPerspective.attached): serialize the
6517 new-builder interrogation process, to make testing easier
6518 (BotMaster.waitUntilBuilderDetached): convenience function
6520 * buildbot/status/builder.py (BuilderStatus): prune old builds
6521 (BuildStatus.pruneSteps): .. and steps
6522 (BuildStepStatus.pruneLogs): .. and logs
6523 (BuilderStatus.getBuild): handle missing builds
6524 * buildbot/status/html.py (StatusResourceBuild.body): display build
6525 status in the per-build page
6526 (BuildBox.getBox): color finished builds in the per-build box
6528 2004-08-27 Brian Warner <warner@lothar.com>
6530 * buildbot/status/mail.py (MailNotifier): new notification class,
6533 * buildbot/slave/commands.py (SourceBase): refactor SVN and CVS into
6534 variants of a common base class which handles all the mode= logic
6536 * buildbot/interfaces.py (IBuildStatus.getPreviousBuild): add
6538 * buildbot/status/builder.py (BuildStatus.getPreviousBuild): same
6540 2004-08-26 Brian Warner <warner@lothar.com>
6542 * buildbot/test/test_slavecommand.py: accomodate new slavecommand
6545 * buildbot/test/test_run.py: update to new Logfile interface, new
6546 buildbot.slave modules
6547 * buildbot/test/test_steps.py: same, remove Swappable, add timeouts
6549 * MANIFEST.in: new sample config file
6550 * docs/examples/hello.cfg: same
6552 * buildbot/process/step_twisted.py: remove dead import
6554 * buildbot/process/step.py (RemoteCommand.run): catch errors
6556 (RemoteCommand.remote_update): ignore updates that arrive after
6558 (RemoteCommand.remote_complete): ignore duplicate complete msgs
6559 (RemoteCommand._remoteComplete): cleanup failure handling, reduce
6560 the responsibilities of the subclass's methods
6561 (BuildStep.failed): catch errors during failure processing
6562 (BuildStep.addHTMLLog): provide all-HTML logfiles (from Failures)
6563 (CVS): move to a mode= argument (described in docstring), rather
6564 than the ungainly clobber=/export=/copydir= combination.
6565 (SVN): add mode= functionality to SVN too
6566 (todo_Darcs, todo_Arch, todo_P4): placeholders for future work
6568 * buildbot/process/base.py (Build.startNextStep): catch errors
6569 during s.startStep()
6571 * buildbot/clients/base.py: update to new PB client interface.
6572 gtkPanes is still broken
6574 * buildbot/bot.py, buildbot/slavecommand.py: move to..
6575 * buildbot/slave/bot.py, buildbot/slave/commands.py: .. new directory
6576 * setup.py: add buildbot.slave module
6577 * buildbot/bb_tap.py: handle move
6578 * buildbot/slave/registry.py: place to register commands, w/versions
6579 * buildbot/slave/bot.py: major simplifications
6580 (SlaveBuilder.remote_startCommand): use registry for slave commands,
6581 instead of a fixed table. Eventually this will make the slave more
6582 extensible. Use 'start' method on the command, not .startCommand.
6583 Fix unsafeTracebacks handling (I think).
6584 * buildbot/slave/commands.py: major cleanup. ShellCommand is now a
6585 helper class with a .start method that returns a Deferred.
6586 SlaveShellCommand is the form reached by the buildmaster. Commands
6587 which use multiple ShellCommands can just chain them as Deferreds,
6588 with some helper methods in Command (_abandonOnFailure and
6589 _checkAbandoned) to bail on rc!=0.
6590 (CVSCommand): prefer new mode= argument
6591 (SVNFetch): add mode= argument
6593 * buildbot/master.py (DebugPerspective.perspective_forceBuild):
6594 put a useful reason string on the build
6596 * buildbot/status/builder.py (LogFile): do LogFile right: move the
6597 core functionality into an IStatusLog object
6598 (BuildStatus.sendETAUpdate): don't send empty build-eta messages
6599 * buildbot/status/html.py (TextLog): HTML-rendering goes here
6600 (StatusResourceBuild.body): use proper accessor methods
6601 * buildbot/status/client.py (RemoteLog): PB-access goes here
6602 (StatusClientPerspective.perspective_subscribe): add "full" mode,
6603 which delivers log contents too
6604 (PBListener.__cmp__): make PBListeners comparable, thus removeable
6605 * buildbot/status/event.py: remove old Logfile completely
6607 * buildbot/interfaces.py (IStatusLog.subscribe): make the
6608 subscription interface for IStatusLog subscriptions just like all
6609 other the status subscriptions
6610 (IStatusReceiver.logChunk): method called on subscribers
6612 2004-08-24 Brian Warner <warner@lothar.com>
6614 * buildbot/process/builder.py (Builder._pong): oops, ping response
6615 includes a result (the implicit None returned by remote_print).
6616 Accept it so the _pong method handles the response correctly.
6618 2004-08-06 Brian Warner <warner@lothar.com>
6620 * buildbot/test/test_config.py: update IRC, PBListener tests
6622 * buildbot/status/client.py (StatusClientPerspective): total
6623 rewrite to match new IStatus interfaces. New subscription scheme.
6624 There are still a few optimizations to make (sending down extra
6625 information with event messages so the client doesn't have to do a
6626 round trip). The logfile-retrieval code is probably still broken.
6627 Moved the PB service into its own port, you can no longer share a
6628 TCP socket between a PBListener and, say, the slaveport (this
6629 should be fixed eventually).
6630 * buildbot/clients/base.py (Client): revamp to match. still needs
6631 a lot of work, but basic event reporting works fine. gtkPanes is
6634 * buildbot/status/words.py (IRC): move to c['status']. Each IRC
6635 instance talks to a single irc server. Threw out all the old
6636 multi-server handling code. Still need to add back in
6637 builder-control (i.e. "force build")
6639 * buildbot/status/html.py (StatusResourceBuildStep.body): add some
6640 more random text to the as-yet-unreachable per-step page
6642 * buildbot/status/builder.py (BuildStepStatus.sendETAUpdate):
6643 rename to stepETAUpdate
6644 (BuildStatus.subscribe): add build-wide ETA updates
6645 (BuilderStatus.getState): remove more cruft
6646 (BuilderStatus.getCurrentBuild): remove more cruft
6647 (BuilderStatus.buildStarted): really handle tuple-subscription
6648 * buildbot/test/test_run.py (Status.testSlave): handle the
6649 stepETAUpdate rename
6651 * buildbot/master.py (BuildMaster): don't add a default
6652 StatusClientService. Don't add a default IrcStatusFactory. Both
6653 are now added through c['status'] in the config file. c['irc'] is
6654 accepted for backwards compatibility, the only quirk is you cannot
6655 use c['irc'] to specify IRC servers on ports other than 6667.
6657 * buildbot/interfaces.py (IBuildStatus.getCurrentStep): add method
6658 (IStatusReceiver.buildStarted): allow update-interval on subscribe
6659 (IStatusReceiver.buildETAUpdate): send build-wide ETA updates
6660 (IStatusReceiver.stepETAUpdate): rename since it's step-specific
6663 * buildbot/master.py (BuildMaster.startService): SIGHUP now causes
6664 the buildmaster to re-read its config file
6667 * buildbot/test/test_web.py (test_webPortnum): need a new hack to
6668 find out the port our server is running on
6669 (WebTest.test_webPathname_port): same
6671 * buildbot/test/test_config.py (testWebPortnum): test it
6672 (testWebPathname): ditto
6674 * docs/config.xhtml: document new c['status'] configuration option
6676 * buildbot/status/html.py (Waterfall): new top-level class which
6677 can be added to c['status']. This creates the Site as well as the
6678 necessary TCPServer/UNIXServer. It goes through the BuildMaster,
6679 reachable as .parent, for everything.
6681 * buildbot/master.py (Manhole): make it a normal service Child
6682 (BuildMaster.loadConfig_status): c['status'] replaces webPortnum and
6683 webPathname. It will eventually replace c['irc'] and the implicit
6684 PB listener as well. c['webPortnum'] and c['webPathname'] are left
6685 in as (deprecated) backward compatibility hooks for now.
6688 * buildbot/process/builder.py (Builder.buildFinished): don't
6689 inform out builder_status about a finished build, as it finds out
6690 through its child BuildStatus object
6692 * buildbot/status/html.py: extensive revamp. Use adapters to make
6693 Boxes out of BuildStepStatus and friends. Acknowledge that Steps
6694 have both starting and finishing times and adjust the waterfall
6695 display accordingly, using spacers if necessary. Use SlaveStatus
6696 to get buildslave info.
6697 (StatusResourceBuildStep): new just-one-step resource, used to get
6698 logfiles. No actual href to it yet.
6700 * buildbot/status/event.py (Logfile.doSwap): disable Swappable for
6701 the time being, until I get the file-naming scheme right
6703 * buildbot/status/builder.py (Event): clean started/finished names
6704 (BuildStatus.isFinished): .finished is not None is the right test
6705 (BuildStatus.buildStarted): track started/finished times ourselves
6706 (BuilderStatus.getSlave): provide access to SlaveStatus object
6707 (BuilderStatus.getLastFinishedBuild): all builds are now in
6708 .builds, even the currently-running one. Accomodate this change.
6709 (BuilderStatus.eventGenerator): new per-builder event generator.
6710 Returns BuildStepStatus and BuildStatus objects, since they can
6711 both be adapted as necessary.
6712 (BuilderStatus.addEvent): clean up started/finished attributes
6713 (BuilderStatus.startBuild,finishBuild): remove dead code
6714 (SlaveStatus): new object to provide ISlaveStatus
6716 * buildbot/process/step.py (ShellCommand.getColor): actually
6717 return the color instead of setting it ourselves
6718 (CVS.__init__): pull .timeout and .workdir options out of
6719 **kwargs, since BuildStep will ignore them. Without this neither
6720 will be sent to the slave correctly.
6721 (SVN.__init__): same
6723 * buildbot/process/builder.py (Builder): move flags to class-level
6725 (Builder.attached): remove .remoteInfo, let the BotPerspective and
6726 SlaveStatus handle that
6728 * buildbot/process/base.py (Build.firstEvent): remove dead code
6729 (Build.stopBuild): bugfix
6731 * buildbot/changes/pb.py (PBChangeSource.describe): add method
6733 * buildbot/changes/changes.py (Change): add IStatusEvent methods
6734 (ChangeMaster.eventGenerator): yield Changes, since there are now
6735 Adapters to turn them into HTML boxes
6737 * buildbot/master.py (BotMaster): track SlaveStatus from BotMaster
6738 (BotPerspective.attached): feed a SlaveStatus object
6739 (BuildMaster.loadConfig): add a manhole port (debug over telnet)
6740 (BuildMaster.loadConfig_Builders): give BuilderStatus a parent
6742 * buildbot/interfaces.py: API additions
6743 (ISlaveStatus): place to get slave status
6745 2004-08-04 Brian Warner <warner@lothar.com>
6747 * buildbot/slavecommand.py (DummyCommand.finished): send rc=0 when
6748 the delay finishes, so the step is marked as SUCCESS
6750 * buildbot/test/test_run.py (Status.testSlave): cover more of
6751 IBuildStatus and IBuildStepStatus
6753 * buildbot/status/progress.py (StepProgress): move some flags to
6754 class-level attributes
6755 (StepProgress.remaining): if there are no other progress metrics
6756 to go by, fall back to elapsed time
6757 (StepProgress.setExpectations): take a dict of metrics instead of
6759 (BuildProgress.setExpectationsFrom): pull expectations from the
6760 Expectations, instead of having it push them to the BuildProgress
6761 (Expectations): move some flags to class-level attributes
6762 (Expectations.__init__): copy per-step times from the
6764 (Expectations.expectedBuildTime): new method for per-build ETA
6766 * buildbot/status/event.py (Logfile): move some flags to
6767 class-level attributes
6768 (Logfile.logProgressTo): better method name, let step set the
6769 progress axis name (instead of always being "output")
6771 * buildbot/status/builder.py (BuildStepStatus.getTimes): track the
6772 times directly, rather than depending upon the (possibly missing)
6773 .progress object. Use 'None' to indicate "not started/finished
6775 (BuildStepStatus.getExpectations): oops, return the full list of
6777 (BuilderStatus._buildFinished): append finished builds to .builds
6779 * buildbot/process/step.py (BuildStep): add separate .useProgress
6780 flag, since empty .progressMetrics[] still implies that time is a
6782 (CVS): set up the cmd in __init__, instead of waiting for start()
6784 * buildbot/process/base.py (Build.startBuild): disable the 'when'
6785 calculation, this will eventually turn into a proper sourceStamp
6786 (Build.setupBuild): tell the Progress to load from the Expectations,
6787 instead of having the Expectations stuff things into the Progress
6788 (Build.buildException): add a build-level errback to make sure the
6789 build's Deferred fires even in case of exceptions
6791 * buildbot/master.py (BotMaster.forceBuild): convey the reason into
6793 * buildbot/process/builder.py (Builder.forceBuild): convey the
6794 reason instead of creating a fake Change
6796 * docs/examples/twisted_master.cfg: update to match reality
6798 * buildbot/test/test_config.py, buildbot/test/test_process.py:
6799 * buildbot/test/test_run.py, buildbot/test/test_steps.py:
6800 fix or remove broken/breaking tests
6802 * buildbot/status/event.py (Logfile.__len__): remove evil method
6804 * buildbot/status/builder.py (BuildStepStatus.stepStarted): tolerate
6805 missing .build, for test convenience
6807 * buildbot/process/step_twisted.py: import fixes
6809 * buildbot/process/step.py (BuildStep.failed): exception is FAILURE
6811 * buildbot/master.py (BuildMaster.loadConfig_Builders): leftover
6812 .statusbag reference
6814 * buildbot/bot.py (BuildSlave.stopService): tear down the TCP
6815 connection at shutdown, and stop it from reconnecting
6817 * buildbot/test/test_run.py (Run.testSlave): use a RemoteDummy to
6818 chase down remote-execution bugs
6820 * buildbot/process/step.py: more fixes, remove
6821 BuildStep.setStatus()
6822 * buildbot/status/builder.py: move setStatus() functionality into
6824 * buildbot/status/event.py: minor fixes
6826 2004-08-03 Brian Warner <warner@lothar.com>
6828 * buildbot/process/base.py, buildbot/process/builder.py
6829 * buildbot/process/step.py, buildbot/status/builder.py
6830 * buildbot/status/event.py, buildbot/test/test_run.py:
6831 fix status delivery, get a basic test case working
6832 * buildbot/master.py: finish implementing basic status delivery,
6833 temporarily disable HTML/IRC/PB status sources
6835 * buildbot/bot.py (Bot.remote_setBuilderList): remove debug noise
6837 * buildbot/status/progress.py (BuildProgress): remove dead code
6839 * buildbot/interfaces.py
6840 * buildbot/process/base.py, buildbot/process/builder.py
6841 * buildbot/process/step.py, buildbot/process/step_twisted.py
6842 * buildbot/status/builder.py: Complete overhaul of the all
6843 status-delivery code, unifying all types of status clients (HTML,
6844 IRC, PB). See interfaces.IBuildStatus for an idea of what it will
6845 look like. This commit is a checkpointing of the work-in-progress:
6846 the input side is mostly done (Builders/Builds sending status
6847 to the BuilderStatus/BuildStatus objects), but the output side has
6848 not yet been started (HTML resources querying BuilderStatus
6849 objects). Things are probably very broken right now and may remain
6850 so for several weeks, I apologize for the disruption.
6852 * buildbot/status/event.py: add a setHTML method to use pre-rendered
6853 HTML as the log's contents. Currently used for exception tracebacks.
6854 * buildbot/status/progress.py: minor spelling changes
6856 2004-08-02 Brian Warner <warner@lothar.com>
6858 * docs/config.xhtml: XHTML fixes, makes raw .xhtml files viewable
6859 in mozilla. Also added stylesheets copied from Twisted's docs.
6860 Remember that these files are meant to be run through Lore first.
6861 Thanks to Philipp Frauenfelder for the fixes.
6862 * docs/factories.xhtml, docs/sources.xhtml, docs/steps.xhtml: same
6863 * docs/stylesheet-unprocessed.css, docs/stylesheet.css: same
6864 * docs/template.tpl: added a Lore template
6866 2004-07-29 Brian Warner <warner@lothar.com>
6868 * buildbot/interfaces.py: revamp status delivery. This is the
6869 preview: these are the Interfaces that will be provided by new
6870 Builder code, and to which the current HTML/IRC/PB status
6871 displayers will be adapted.
6873 * buildbot/slavecommand.py (ShellCommand.start): look for .usePTY
6874 on the SlaveBuilder, not the Bot.
6875 * buildbot/bot.py (Bot.remote_setBuilderList): copy Bot.usePTY to
6877 * buildbot/test/test_slavecommand.py (FakeSlaveBuilder.usePTY):
6878 set .usePTY on the FakeSlaveBuilder
6880 2004-07-25 Brian Warner <warner@lothar.com>
6882 * buildbot/changes/freshcvs.py: add some debug log messages
6883 (FreshCVSConnectionFactory.gotPerspective): pre-emptively fix the
6884 disabled 'setFilter' syntax
6885 (FreshCVSSourceNewcred.__init__): warn about prefix= values that
6886 don't end with a slash
6888 * buildbot/process/base.py (Builder._pong_failed): add TODO note
6890 * setup.py: bump to 0.5.0+ while between releases
6892 2004-07-23 Brian Warner <warner@lothar.com>
6894 * setup.py (version): Releasing buildbot-0.5.0
6896 2004-07-23 Brian Warner <warner@lothar.com>
6898 * README: update for 0.5.0 release
6900 * NEWS: update for 0.5.0 release
6902 2004-07-22 Brian Warner <warner@lothar.com>
6904 * buildbot/slavecommand.py (ShellCommand): make usePTY a
6905 mktap-time configuration flag (--usepty=1, --usepty=0)
6906 * buildbot/bot.py: same
6908 * buildbot/master.py (BotPerspective.got_dirs): don't complain about
6909 an 'info' directory being unwanted
6911 * buildbot/changes/freshcvs.py (FreshCVSSource): flip the
6912 newcred/oldcred switch. Newcred (for CVSToys-1.0.10 and later) is now
6913 the default. To communicate with an oldcred daemond (CVSToys-1.0.9
6914 and earlier), use a FreshCVSSourceOldcred instead.
6915 (test): simple test routine: connect to server, print changes
6917 * buildbot/changes/changes.py (Change.getTime): make it possible
6918 to print un-timestamped changes
6920 * buildbot/master.py (makeApp): delete ancient dead code
6921 (BuildMaster.loadTheConfigFile): make "master.cfg" name configurable
6922 * buildbot/test/test_config.py (testFindConfigFile): test it
6924 * docs/examples/twisted_master.cfg (b22w32): use iocp reactor
6925 instead of win32 one
6928 * buildbot/master.py (BuildMaster.loadConfig_Builders): config file
6929 now takes a dictionary instead of a tuple. See docs/config.xhtml for
6932 * buildbot/process/base.py (Builder.__init__): change constructor
6933 to accept a dictionary of config data, rather than discrete
6934 name/slave/builddir/factory arguments
6936 * docs/examples/twisted_master.cfg: update to new syntax
6937 * docs/examples/glib_master.cfg: same
6938 * buildbot/test/test_config.py (ConfigTest.testBuilders): some
6939 rough tests of the new syntax
6942 * buildbot/master.py (BuildMaster.loadConfig): allow webPathname
6943 to be an int, which means "run a web.distrib sub-server on a TCP
6944 port". This lets you publish the buildbot status page to a remote
6945 twisted.web server (using distrib.ResourceSubscription). Also
6946 rename the local attributes used to hold these web things so
6947 they're more in touch with reality.
6948 * buildbot/test/test_web.py: test webPortnum and webPathname
6949 * docs/config.xhtml: document this new use of webPathname
6951 * docs/config.xhtml: new document, slightly ahead of reality
6953 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.notify): fix
6954 'prefix' handling: treat it as a simple string to check with
6955 .startswith, instead of treating it as a directory. This allows
6956 sub-directories to be used. If you use prefix=, you should give it
6957 a string that starts just below the CVSROOT and ends with a slash.
6958 This prefix will be stripped from all filenames, and filenames
6959 which do not start with it will be ignored.
6961 2004-07-20 Cory Dodt <corydodt@twistedmatrix.com>
6963 * contrib/svn_buildbot.py: Add --include (synonym for --filter)
6964 and --exclude (inverse of --include). SVN post-commit hooks
6965 now have total control over which changes get sent to buildbot and which
6968 2004-07-10 Brian Warner <warner@lothar.com>
6970 * buildbot/test/test_twisted.py (Case1.testCountFailedTests): fix
6971 test case to match new API
6973 * buildbot/status/event.py (Logfile.getEntries): fix silly bug
6974 which crashed HTML display when self.entries=[] (needed to
6975 distinguish between [], which means "no entries yet", and None,
6976 which means "the entries have been swapped out to disk, go fetch
6979 2004-07-04 Brian Warner <warner@lothar.com>
6981 * buildbot/process/step_twisted.py (countFailedTests): Count
6982 skips, expectedFailures, and unexpectedSuccesses. Start scanning
6983 10kb from the end because any import errors are wedged there and
6984 they would make us think the test log was unparseable.
6985 (RunUnitTests.finishStatus): add skip/todo counts to the event box
6987 2004-06-26 Brian Warner <warner@lothar.com>
6989 * buildbot/process/step_twisted.py (RemovePYCs): turn the
6990 delete-*.pyc command into an actual BuildStep, so we can label it
6992 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
6993 (FullTwistedBuildFactory): same
6995 2004-06-25 Cory Dodt <corydodt@twistedmatrix.com>
6997 * contrib/fakechange.py: Add an errback when sending the fake
6998 change, so we know it didn't work.
7000 2004-06-25 Christopher Armstrong <radix@twistedmatrix.com>
7002 * buildbot/process/step_twisted.py: Delete *.pyc files before
7003 calling trial, so it doesn't catch any old .pyc files whose .py
7004 files have been moved or deleted.
7006 * buildbot/process/step_twisted.py (RunUnitTests): 1) Add a new
7007 parameter, 'recurse', that passes -R to trial. 2) have 'runAll'
7008 imply 'recurse'. 3) Make the default 'allTests' be ["twisted"]
7009 instead of ["twisted.test"], so that the end result is "trial -R
7012 * contrib/svn_buildbot.py: Add a --filter parameter that accepts a
7013 regular expression to match filenames that should be ignored when
7014 changed. Also add a --revision parameter that specifies the
7015 revision to examine, which is useful for debugging.
7017 2004-06-25 Brian Warner <warner@lothar.com>
7019 * buildbot/process/step_twisted.py (trialTextSummarizer): create a
7020 summary of warnings (like DeprecationWarnings), next to the
7023 2004-05-13 Brian Warner <warner@lothar.com>
7025 * docs/examples/twisted_master.cfg: enable the win32 builder, as
7026 we now have a w32 build slave courtesy of Mike Taylor.
7028 * buildbot/process/base.py (Build.checkInterlocks): OMG this was
7029 so broken. Fixed a race condition that tripped up interlocked
7030 builds and caused the status to be stuck at "Interlocked" forever.
7031 The twisted buildbot's one interlocked build just so happened to
7032 never hit this case until recently (the feeding builds both pass
7033 before the interlocked build is attempted.. usually it has to wait
7035 (Builder._pong_failed): fix method signature
7037 * setup.py: bump to 0.4.3+ while between releases
7039 2004-04-30 Brian Warner <warner@lothar.com>
7041 * setup.py (version): Releasing buildbot-0.4.3
7043 2004-04-30 Brian Warner <warner@lothar.com>
7045 * MANIFEST.in: add the doc fragments in docs/*.xhtml
7047 * README: update for 0.4.3 release
7049 * NEWS: update for 0.4.3 release
7051 * buildbot/master.py (BuildMaster.__getstate__): make sure
7052 Versioned.__getstate__ is invoked, for upgrade from 0.4.2
7054 * buildbot/process/step_twisted.py (RunUnitTests.trial): add
7055 .trial as a class attribute, for upgrade from 0.4.2
7057 * buildbot/changes/changes.py (Change.links): add .links for
7060 * buildbot/status/event.py (Logfile.__getstate__): get rid of both
7061 .textWatchers and .htmlWatchers at save time, since they are both
7062 volatile, should allow smooth 0.4.2 upgrade
7064 * buildbot/process/step.py (CVS.finishStatus): catch failed
7065 CVS/SVN commands so we can make the status box red
7067 2004-04-29 Brian Warner <warner@lothar.com>
7069 * buildbot/changes/freshcvs.py
7070 (FreshCVSConnectionFactory.gotPerspective): add (commented-out)
7071 code to do setFilter(), which tells the freshcvs daemon to not
7072 send us stuff that we're not interested in. I will uncomment it
7073 when a new version of CVSToys is available in which setFilter()
7074 actually works, and I get a chance to test it better.
7076 * docs/examples/twisted_master.cfg: start using a PBChangeSource
7078 * buildbot/master.py (Dispatcher): use a registration scheme
7079 instead of hardwired service names
7080 (BuildMaster): keep track of the Dispatcher to support
7083 * buildbot/changes/changes.py (ChangeMaster): create a distinct
7084 PBChangeSource class instead of having it be an undocumented
7085 internal feature of the ChangeMaster. Split out the code into a
7087 * buildbot/changes/pb.py (PBChangeSource): same
7088 * buildbot/test/test_changes.py: a few tests for PBChangeSource
7090 * docs/{factories|sources|steps}.xhtml: document some pieces
7092 * docs/examples/twisted_master.cfg: use SVN instead of CVS, stop
7093 using FCMaildirSource
7094 (f23osx): update OS-X builder to use python2.3, since the slave
7095 was updated to Panther (10.3.3)
7097 2004-03-21 Brian Warner <warner@lothar.com>
7099 * buildbot/process/process_twisted.py: factor out doCheckout, change
7100 to use SVN instead of CVS
7102 * buildbot/process/base.py (BasicBuildFactory): refactor to make
7103 an SVN subclass easier
7104 (BasicSVN): subclass which uses Subversion instead of CVS
7106 2004-03-15 Christopher Armstrong <radix@twistedmatrix.com>
7108 * buildbot/slavecommand.py (ShellCommand.start): use COMSPEC instead
7110 (CVSCommand.cvsComplete): don't assume chdir worked on win32
7112 2004-02-25 Brian Warner <warner@lothar.com>
7114 * buildbot/slavecommand.py (ShellCommand): ['commands'] argument
7115 is now either a list (which is passed to spawnProcess directly) or
7116 a string (which gets passed to /bin/sh -c). This removes the useSH
7117 flag and the ArgslistCommand class. Also send status header at the
7118 start and end of each command, instead of having the master-side
7120 (CVSCommand): fix the doUpdate command, it failed to do the 'cp
7121 -r'. Update to use list-based arguments.
7122 (SVNFetch): use list-based arguments, use ['dir'] argument to
7124 * buildbot/test/test_steps.py (Commands): match changes
7126 * buildbot/process/step.py (InternalShellCommand.words): handle
7128 (SVN): inherit from CVS, cleanup
7130 * buildbot/status/event.py (Logfile.content): render in HTML, with
7131 stderr in red and headers (like the name of the command we're
7132 about to run) in blue. Add link to a second URL (url + "?text=1")
7133 to get just stdout/stderr in text/plain without markup. There is
7134 still a problem with .entries=None causing a crash, it seems to occur
7135 when the logfile is read before it is finished.
7137 * buildbot/bot.py (BotFactory.doKeepalive): add a 30-second
7138 timeout to the keepalives, and use it to explicitly do a
7139 loseConnection instead of waiting for TCP to notice the loss. This
7140 ought to clear up the silent-lossage problem.
7141 (unsafeTracebacks): pass exception tracebacks back to the master,
7142 makes it much easier to debug problems
7144 2004-02-23 Brian Warner <warner@lothar.com>
7146 * buildbot/slavecommand.py (ShellCommand): add useSH flag to pass
7147 the whole command to /bin/sh instead of execve [Johan Dahlin]
7148 (CVSCommand): drop '-r BRANCH' if BRANCH==None instead of usiing
7149 '-r HEAD' [Johan Dahlin]
7150 (CVSCommand.start2): fix cvsdir calculation [Johan Dahlin]
7152 * buildbot/changes/changes.py (Change): add links= argument, add
7153 asHTML method [Johan Dahlin]. Modified to make a bit more
7154 XHTMLish. Still not sure how to best use links= .
7156 * buildbot/status/html.py (StatusResourceCommits.getChild): use
7157 Change.asHTML to display the change, not asText
7159 * buildbot/status/html.py (StatusResourceBuilder): web button to
7162 * buildbot/test/test_run.py: test to actually start a buildmaster
7165 * MANIFEST.in: bring back accidentally-dropped test helper files
7167 * buildbot/test/test_config.py (ConfigTest.testSources): skip tests
7168 that require cvstoys if it is not installed
7170 * buildbot/process/step_twisted.py (RunUnitTests): allow other
7171 values of "bin/trial" [Dave Peticolas]
7172 (RunUnitTests.finishStatus): say "no tests run" instead of "0
7173 tests passed" when we didn't happen to run any tests
7175 * buildbot/process/step.py (Compile): use haltOnFailure instead of
7176 flunkOnFailure [Johan Dahlin]
7178 * buildbot/process/base.py (ConfigurableBuild.setSteps): allow
7179 multiple instances of the same Step class by suffixing "_2", etc,
7180 to the name until it is unique. This name needs to be unique
7181 because it is used as a key in the dictionary that tracks build
7183 * buildbot/test/test_steps.py (Steps.testMultipleStepInstances):
7186 * buildbot/process/base.py (Builder.ping): add "ping slave" command
7188 2004-01-14 Brian Warner <warner@lothar.com>
7190 * buildbot/status/words.py (IrcStatusBot): when we leave or get
7191 kicked from a channel, log it
7193 * buildbot/master.py (Dispatcher): add "poke IRC" command to say
7194 something over whatever IRC channels the buildmaster is currently
7195 connected to. Added to try and track down a problem in which the
7196 master thinks it is still connected but the IRCd doesn't see it. I
7197 used a styles.Versioned this time, so hopefully users won't have
7198 to rebuild their .tap files this time.
7199 * contrib/debug.glade: add a "Poke IRC" button
7200 * contrib/debugclient.py: same
7202 * setup.py: bump to 0.4.2+ while between releases
7204 2004-01-08 Brian Warner <warner@lothar.com>
7206 * setup.py (version): Releasing buildbot-0.4.2
7208 2004-01-08 Brian Warner <warner@lothar.com>
7210 * NEWS: update for 0.4.2 release
7212 * README: document how to run the tests, now that they all pass
7214 * buildbot/changes/maildir.py (Maildir.poll): minor comment
7216 * buildbot/process/step.py (CVS): add a global_options= argument,
7217 which lets you set CVS global options for the command like "-r"
7218 for read-only checkout, or "-R" to avoid writing in the
7220 * buildbot/slavecommand.py (CVSCommand): same
7222 * buildbot/status/event.py (Logfile): add a .doSwap switch to make
7223 testing easier (it is turned off when testing, to avoid the
7226 * buildbot/process/step.py (InternalBuildStep): shuffle code a bit
7227 to make it easier to test: break generateStepID() out to a
7228 separate function, only update statusbag if it exists.
7229 (ShellCommands): create useful text for dict-based commands too.
7231 * test/*, buildbot/test/*: move unit tests under the buildbot/
7233 * setup.py (packages): install buildbot.test too
7235 * buildbot/test/test_slavecommand.py: fix it, tests pass now
7236 * buildbot/test/test_steps.py: fix it, tests pass now
7238 2004-01-06 Brian Warner <warner@lothar.com>
7240 * buildbot/changes/mail.py (parseFreshCVSMail): looks like new
7241 freshcvs mail uses a slightly different syntax for new
7242 directories. Update parser to handle either.
7243 * test/test_mailparse.py (Test1.testMsg9): test for same
7245 2003-12-21 Brian Warner <warner@lothar.com>
7247 * buildbot/process/process_twisted.py (TwistedDebsBuildFactory): set
7248 'warnOnWarnings' so that lintian errors mark the build orange
7250 2003-12-17 Brian Warner <warner@lothar.com>
7252 * buildbot/changes/mail.py (parseBonsaiMail): parser for commit
7253 messages emitted by Bonsai, contributed by Stephen Davis.
7255 * test/*: moved all tests to use trial instead of unittest. Some
7256 still fail (test_steps, test_slavecommand, and test_process).
7258 * setup.py (version): bump to 0.4.1+ while between releases
7260 2003-12-09 Brian Warner <warner@lothar.com>
7262 * setup.py (version): Releasing buildbot-0.4.1
7264 2003-12-09 Brian Warner <warner@lothar.com>
7266 * NEWS: update for 0.4.1 release
7268 * docs/examples/twisted_master.cfg: add netbsd builder, shuffle
7269 freebsd builder code a little bit
7271 * buildbot/changes/freshcvs.py (FreshCVSSourceNewcred.__cmp__):
7272 don't try to compare attributes of different classes
7273 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
7274 (MaildirSource.messageReceived): fix Change delivery
7276 * buildbot/master.py (BuildMaster.loadConfig): insert 'basedir'
7277 into the config file's namespace before loading it, like the
7278 documentation claims it does
7279 * docs/examples/twisted_master.cfg: remove explicit 'basedir'
7280 (useFreshCVS): switch to using a maildir until Twisted's freshcvs
7281 daemon comes back online
7283 2003-12-08 Brian Warner <warner@lothar.com>
7285 * docs/examples/twisted_master.cfg: provide an explicit 'basedir'
7286 so the example will work with online=0 as well
7288 * buildbot/changes/mail.py (FCMaildirSource, SyncmailMaildirSource):
7289 fix the __implements__ line
7291 * buildbot/changes/maildirtwisted.py (MaildirTwisted): make this
7292 class a twisted.application.service.Service, use startService to
7295 * buildbot/changes/dnotify.py (DNotify): use os.open to get the
7296 directory fd instead of simple open(). I'm sure this used to work,
7297 but the current version of python refuses to open directories with
7300 2003-12-05 Brian Warner <warner@lothar.com>
7302 * setup.py (version): bump to 0.4.0+ while between releases
7304 2003-12-05 Brian Warner <warner@lothar.com>
7306 * setup.py (version): Releasing buildbot-0.4.0
7308 2003-12-05 Brian Warner <warner@lothar.com>
7310 * docs/examples/glib_master.cfg: replace old sample scripts with
7311 new-style config files
7312 * MANIFEST.in: include .cfg files in distribution tarball
7314 * buildbot/changes/freshcvs.py (FreshCVSListener.remote_goodbye):
7315 implement a dummy method to avoid the exception that occurs when
7316 freshcvs sends this to us.
7318 * buildbot/pbutil.py (ReconnectingPBClientFactory.stopFactory):
7319 removed the method, as it broke reconnection. Apparently
7320 stopFactory is called each time the connection attempt fails. Must
7322 (ReconnectingPBClientFactory.__getstate__): squash the _callID
7323 attribute before serialization, since without stopFactory the
7324 reconnect timer may still be active and they aren't serializable.
7326 * test/test_mailparse.py (ParseTest): test with 'self' argument
7328 * buildbot/changes/mail.py (parseFreshCVSMail): add (silly) 'self'
7329 argument, as these "functions" are invoked like methods from class
7330 attributes and therefore always get an instance as the first
7333 * buildbot/changes/maildir.py (Maildir.start): fix error in error
7334 message: thanks to Stephen Davis for the catch
7336 2003-12-04 Brian Warner <warner@lothar.com>
7338 * buildbot/pbutil.py: complete rewrite using PBClientFactory and
7339 twisted's standard ReconnectingClientFactory. Handles both oldcred
7340 and newcred connections. Also has a bug-workaround for
7341 ReconnectingClientFactory serializing its connector when it
7344 * buildbot/bot.py (BotFactory): rewrite connection layer with new
7345 pbutil. Replace makeApp stuff with proper newcred/mktap
7346 makeService(). Don't serialize Ephemerals on shutdown.
7348 * buildbot/changes/changes.py (ChangeMaster): make it a
7349 MultiService and add the sources as children, to get startService
7350 and stopService for free. This also gets rid of the .running flag.
7352 * buildbot/changes/freshcvs.py (FreshCVSSource): rewrite to use
7353 new pbutil, turn into a TCPClient at the same time (to get
7354 startService for free). Two variants exist: FreshCVSSourceOldcred
7355 and FreshCVSSourceNewcred (CVSToys doesn't actualy support newcred
7356 yet, but when it does, we'll be ready).
7357 (FreshCVSSource.notify): handle paths which are empty after the
7358 prefix is stripped. This only happens when the top-level (prefix)
7359 directory is added, at the very beginning of a Repository's life.
7361 * buildbot/clients/base.py: use new pbutil, clean up startup code.
7362 Now the only reconnecting code is in the factory where it belongs.
7363 (Builder.unsubscribe): unregister the disconnect callback when we
7364 delete the builder on command from the master (i.e. when the
7365 buildmaster is reconfigured and that builder goes away). This
7366 fixes a multiple-delete exception when the status client is shut
7368 * buildbot/clients/gtkPanes.py (GtkClient): cleanup, match the
7371 * buildbot/status/words.py (IrcStatusBot): add some more sillyness
7372 (IrcStatusBot.getBuilderStatus): fix minor exception in error message
7374 2003-10-20 Christopher Armstrong <radix@twistedmatrix.com>
7376 * contrib/run_maxq.py: Accept a testdir as an argument rather than
7377 a list of globs (ugh). The testdir will be searched for files
7378 named *.tests and run the tests in the order specified in each of
7379 those files. This allows for "dependancies" between tests to be
7382 * buildbot/process/maxq.py (MaxQ.__init__): Accept a testdir
7383 argument to pass to run_maxq.py, instead of a glob.
7385 2003-10-17 Brian Warner <warner@lothar.com>
7387 * buildbot/process/step_twisted.py (HLint.start): ignore .xhtml
7388 files that live in the sandbox
7390 2003-10-15 Brian Warner <warner@lothar.com>
7392 * buildbot/process/step_twisted.py (ProcessDocs.finished): fix
7393 spelling error in "docs" count-warnings output
7394 (HLint.start): stupid thinko meant .xhtml files were ignored
7396 * docs/examples/twisted_master.cfg (reactors): disable cReactor
7397 tests now that cReactor is banished to the sandbox
7399 2003-10-10 Brian Warner <warner@lothar.com>
7401 * buildbot/process/step_twisted.py (ProcessDocs, HLint): new Twisted
7402 scheme: now .xhtml are sources and .html are generated
7404 2003-10-08 Brian Warner <warner@lothar.com>
7406 * buildbot/process/step_twisted.py (RunUnitTests.__init__): oops,
7407 we were ignoring the 'randomly' parameter.
7409 2003-10-01 Brian Warner <warner@lothar.com>
7411 * buildbot/slavecommand.py (ShellCommand.start): set usePTY=1 on
7412 posix, to kill sub-children of aborted slavecommands.
7414 * buildbot/status/builder.py: rename Builder to BuilderStatus.
7415 Clean up initialization: lastBuildStatus remains None until the
7416 first build has been completed.
7418 * buildbot/status/html.py (WaterfallStatusResource.body): handle
7419 None as a lastBuildStatus
7420 * buildbot/clients/gtkPanes.py: same
7422 * buildbot/status/client.py (StatusClientService): keep
7423 BuilderStatus objects in self.statusbags . These objects now live
7424 here in the StatusClientService and are referenced by the Builder
7425 object, rather than the other way around.
7426 * buildbot/status/words.py (IrcStatusBot.getBuilderStatus): same
7427 * buildbot/process/base.py (Builder): same
7428 * test/test_config.py (ConfigTest.testBuilders): same
7430 * buildbot/master.py (BuildMaster.loadConfig_Builders): when modifying
7431 an existing builder, leave the statusbag alone. This will preserve the
7434 * buildbot/pbutil.py (ReconnectingPB.connect): add initial newcred
7435 hook. This will probably go away in favor of a class in upcoming
7438 * buildbot/changes/freshcvs.py (FreshCVSSource.start): Remove old
7439 serviceName from newcred FreshCVSNotifiee setup
7441 2003-09-29 Brian Warner <warner@lothar.com>
7443 * buildbot/process/process_twisted.py: switch to new reactor
7445 * docs/examples/twisted_master.cfg: same
7447 * README (REQUIREMENTS): mention twisted-1.0.8a3 requirement
7449 * buildbot/status/words.py (IrcStatusBot.getBuilder): use the
7450 botmaster reference instead of the oldapp service lookup
7452 * buildbot/master.py (BuildMaster.__init__): give the
7453 StatusClientService a reference to the botmaster to make it easier to
7456 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
7458 * buildbot/status/html.py (Box.td): escape hreffy things so you
7459 can have spaces in things like builder names
7460 (StatusResourceBuilder.body)
7461 (WaterfallStatusResource.body)
7462 (WaterfallStatusResource.body0): same
7464 2003-09-25 Brian Warner <warner@lothar.com>
7466 * buildbot/master.py (BuildMaster.loadConfig_Builders): don't
7467 rearrange the builder list when adding or removing builders: keep
7468 them in the order the user requested.
7469 * test/test_config.py (ConfigTest.testBuilders): verify it
7471 * contrib/debug.glade: give the debug window a name
7473 * buildbot/process/base.py (Builder.buildTimerFired): builders can
7474 now wait on multiple interlocks. Fix code relating to that.
7475 (Builder.checkInterlocks): same
7476 * buildbot/status/builder.py (Builder.currentlyInterlocked): same
7478 * buildbot/master.py (BuildMaster.loadConfig): move from
7479 deprecated pb.BrokerFactory to new pb.PBServerFactory
7480 * test/test_config.py (ConfigTest.testWebPathname): same
7482 * docs/examples/twisted_master.cfg: fix interlock declaration
7484 * buildbot/master.py (BotMaster.addInterlock): move code to attach
7485 Interlocks to their Builders into interlock.py .
7486 (BuildMaster.loadConfig_Interlocks): fix interlock handling
7488 * test/test_config.py (ConfigTest.testInterlocks): validate
7491 * buildbot/process/base.py (Builder.__init__): better comments
7492 * buildbot/process/interlock.py (Interlock.__repr__): same
7493 (Interlock.deactivate): add .active flag, move the code that
7494 attaches/detaches builders into the Interlock
7496 2003-09-24 Christopher Armstrong <radix@twistedmatrix.com>
7498 * buildbot/process/maxq.py (MaxQ): support for running a set of MaxQ
7499 tests using the new run_maxq.py script, and reporting failures by
7502 * contrib/run_maxq.py: Hacky little script for running a set of maxq
7503 tests, reporting their success or failure in a buildbot-friendly
7506 2003-09-24 Brian Warner <warner@lothar.com>
7508 * docs/examples/twisted_master.cfg: example of a new-style config
7509 file. This lives in the buildmaster base directory as
7512 * contrib/debugclient.py (DebugWidget.do_rebuild): add 'reload'
7513 button to make the master re-read its config file
7515 * buildbot/master.py (BuildMaster.loadConfig): new code to load
7516 buildmaster configuration from a file. This file can be re-read
7517 later, and the buildmaster will update itself to match the new
7518 desired configuration. Also use new Twisted Application class.
7519 * test/Makefile, test/test_config.py: unit tests for same
7521 * buildbot/changes/freshcvs.py (FreshCVSSource.__cmp__): make
7522 FreshCVSSources comparable, to support reload.
7523 * buildbot/changes/mail.py (MaildirSource.__cmp__): same
7525 * buildbot/process/base.py (Builder): make them comparable, make
7526 Interlocks easier to attach, to support reload. Handle
7527 re-attachment of remote slaves.
7528 * buildbot/process/interlock.py (Interlock): same
7530 * buildbot/bot.py, bb_tap.py, changes/changes.py: move to
7531 Twisted's new Application class. Requires Twisted >= 1.0.8 .
7532 buildmaster taps are now constructed with mktap.
7533 * buildbot/status/client.py (StatusClientService): same
7535 * buildbot/status/words.py: move to new Services, add support to
7536 connect to multiple networks, add reload support, allow nickname
7537 to be configured on a per-network basis
7539 2003-09-20 Brian Warner <warner@lothar.com>
7541 * docs/examples/twisted_master.py (twisted_app): use python2.3 for
7542 the freebsd builder, now that the machine has been upgraded and no
7543 longer has python2.2
7545 * setup.py (version): bump to 0.3.5+ while between releases
7547 2003-09-19 Brian Warner <warner@lothar.com>
7549 * setup.py (version): Releasing buildbot-0.3.5
7551 2003-09-19 Brian Warner <warner@lothar.com>
7553 * NEWS: add post-0.3.4 notes
7555 * README (REQUIREMENTS): note twisted-1.0.7 requirement
7557 * MANIFEST.in: add contrib/*
7559 * docs/examples/twisted_master.py (twisted_app): all build slaves must
7560 use a remote root now: cvs.twistedmatrix.com
7562 * buildbot/changes/freshcvs.py (FreshCVSNotifiee.connect): update
7564 (FreshCVSNotifieeOldcred): but retain a class that uses oldcred for
7565 compatibility with old servers
7566 (FreshCVSSource.start): and provide a way to use it
7567 (FreshCVSNotifiee.disconnect): handle unconnected notifiee
7569 * docs/examples/twisted_master.py (twisted_app): update to new
7571 (twisted_app): listen on new ~buildbot socket
7572 (twisted_app): Twisted CVS has moved to cvs.twistedmatrix.com
7574 * buildbot/process/process_twisted.py: Use 'copydir' on CVS steps
7575 to reduce cvs bandwidth (update instead of full checkout)
7577 2003-09-11 Brian Warner <warner@lothar.com>
7579 * contrib/fakechange.py: demo how to connect to the changemaster
7580 port. You can use this technique to submit changes to the
7581 buildmaster from source control systems that offer a hook to run a
7582 script when changes are committed.
7584 * contrib/debugclient.py: tool to connect to the debug port. You
7585 can use it to force builds, submit fake changes, and wiggle the
7588 * buildbot/master.py: the Big NewCred Reorganization. Use a single
7589 'Dispatcher' realm to handle all the different kinds of
7590 connections and Perspectives: buildslaves, the changemaster port,
7591 the debug port, and the status client port. NewCredPerspectives
7592 now have .attached/.detached methods called with the remote 'mind'
7593 reference, much like old perspectives did. All the pb.Services
7594 turned into ordinary app.ApplicationServices .
7595 (DebugService): went away, DebugPerspectives are now created
7596 directly by the Dispatcher.
7597 (makeApp): changed interface a little bit
7599 * buildbot/changes/changes.py: newcred
7600 * buildbot/status/client.py: newcred
7602 * buildbot/clients/base.py: newcred client side changes
7603 * buildbot/bot.py: ditto
7605 * docs/examples/glib_master.py: handle new makeApp() interface
7606 * docs/examples/twisted_master.py: ditto
7608 * buildbot/pbutil.py (NewCredPerspective): add a helper class to
7609 base newcred Perspectives on. This should go away once Twisted
7610 itself provides something sensible.
7613 2003-09-11 Christopher Armstrong <radix@twistedmatrix.com>
7615 * contrib/svn_buildbot.py: A program that you can call from your
7616 SVNREPO/hooks/post-commit file that will notify a BuildBot master
7617 when a change in an SVN repository has happened. See the top of
7618 the file for some minimal usage info.
7620 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
7622 * buildbot/slavecommand.py (ArglistCommand): Add new
7623 ArglistCommand that takes an argument list rather than a string as
7624 a parameter. Using a st.split() for argv is very bad.
7626 * buildbot/slavecommand.py (SVNFetch): Now has the ability to
7627 update to a particular revision rather than always checking out
7628 (still not very smart about it, there may be cases where the
7629 checkout becomes inconsistent).
7631 2003-09-10 Christopher Armstrong <radix@twistedmatrix.com>
7633 * buildbot/{bot.py,slavecommand.py,process/step.py}: Rudimentary
7634 SVN fetch support. It can checkout (not update!) a specified
7635 revision from a specified repository to a specified directory.
7637 * buildbot/status/progress.py (Expectations.update): Fix an
7638 obvious bug (apparently created by the change described in the
7639 previous ChangeLog message) by moving a check to *after* the
7640 variable it checks is defined.
7643 2003-09-08 Brian Warner <warner@lothar.com>
7645 * buildbot/status/progress.py (Expectations.update): hack to catch
7646 an exception TTimo sees: sometimes the update() method seems to
7647 get called before the step has actually finished, so the .stopTime
7648 is not set, so no totalTime() is available and we average None
7649 with the previous value. Catch this and just don't update the
7650 metrics, and emit a log message.
7652 2003-08-24 Brian Warner <warner@lothar.com>
7654 * buildbot/process/base.py (BasicBuildFactory): accept 'cvsCopy'
7655 parameter to set copydir='original' in CVS commands.
7657 * buildbot/process/step.py (CVS): accept 'copydir' parameter.
7659 * buildbot/slavecommand.py (CVSCommand): add 'copydir' parameter,
7660 which tells the command to maintain a separate original-source CVS
7661 workspace. For each build, this workspace will be updated, then
7662 the tree copied into a new workdir. This reduces CVS bandwidth
7663 (from a full checkout to a mere update) while doubling the local
7664 disk usage (to keep two copies of the tree).
7666 2003-08-21 Brian Warner <warner@lothar.com>
7668 * buildbot/status/event.py (Logfile.addEntry): if the master web
7669 server dies while we're serving a page, request.write raises
7670 pb.DeadReferenceError . Catch this and treat it like a
7671 notifyFinish event by dropping the request.
7673 2003-08-18 Brian Warner <warner@lothar.com>
7675 * buildbot/status/words.py (IrcStatusBot.command_FORCE): complain
7676 (instead of blowing up) if a force-build command is given without
7679 * buildbot/changes/changes.py (ChangeMaster.getChangeNumbered):
7680 don't blow up if there aren't yet any Changes in the list
7682 2003-08-02 Brian Warner <warner@lothar.com>
7684 * buildbot/bot.py (updateApplication): don't set the .tap name,
7685 since we shouldn't assume we own the whole .tap file
7687 * buildbot/bb_tap.py (updateApplication): clean up code, detect
7688 'mktap buildbot' (without a subcommand) better
7690 2003-07-29 Brian Warner <warner@lothar.com>
7692 * buildbot/status/words.py
7693 (IrcStatusFactory.clientConnectionLost): when we lose the
7694 connection to the IRC server, schedule a reconnection attempt.
7696 * buildbot/slavecommand.py (CVSCommand.doClobber): on non-posix,
7697 use shutil.rmtree instead of forking off an "rm -rf" command.
7698 rmtree may take a while and will block until it finishes, so we
7699 use "rm -rf" if available.
7701 * docs/examples/twisted_master.py: turn off kqreactor, it hangs
7702 freebsd buildslave badly
7704 * setup.py (version): bump to 0.3.4+ while between releases
7706 2003-07-28 Brian Warner <warner@lothar.com>
7708 * setup.py (version): Releasing buildbot-0.3.4
7710 2003-07-28 Brian Warner <warner@lothar.com>
7712 * NEWS: update in preparation for release
7714 * buildbot/slavecommand.py (ShellCommand.doTimeout): use
7715 process.signalProcess instead of os.kill, to improve w32
7718 * docs/examples/twisted_master.py (twisted_app): turn off
7719 win32eventreactor: the tests hang the buildslave badly
7721 * buildbot/process/base.py (Build.buildFinished): update ETA even on
7722 failed builds, since usually the failures are consistent
7724 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
7725 add compileOpts/compileOpts2 to reactors build
7727 * docs/examples/twisted_master.py (twisted_app): add "-c mingw32"
7728 (twisted_app): use both default and win32eventreactor on w32 build.
7729 Use both default and kqreactor on freebsd build.
7731 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7732 add compileOpts2, which is put after the build_ext argument. w32
7733 needs "-c mingw32" here.
7735 * buildbot/status/html.py (StatusResourceBuilder.getChild): don't
7736 touch .acqpath, it goes away in recent Twisted releases
7738 * docs/examples/twisted_master.py (twisted_app): use "python" for
7739 the w32 buildslave, not "python2.2"
7741 * buildbot/bot.py (Bot.remote_getSlaveInfo): only look in info/ if
7742 the directory exists.. should hush an exception under w32
7744 * buildbot/slavecommand.py (ShellCommandPP.processEnded): use
7745 ProcessTerminated -provided values for signal and exitCode rather
7746 than parsing the unix status code directly. This should remove one
7747 more roadblock for a w32-hosted buildslave.
7749 * test/test_mailparse.py: add test cases for Syncmail parser
7751 * Buildbot/changes/freshcvsmail.py: remove leftover code, leave a
7752 temporary compatibility import. Note! Start importing
7753 FCMaildirSource from changes.mail instead of changes.freshcvsmail
7755 * buildbot/changes/mail.py (parseSyncmail): finish Syncmail parser
7757 2003-07-27 Brian Warner <warner@lothar.com>
7759 * NEWS: started adding new features
7761 * buildbot/changes/mail.py: start work on Syncmail parser, move
7762 mail sources into their own file
7764 * buildbot/changes/freshcvs.py (FreshCVSNotifiee): mark the class
7765 as implementing IChangeSource
7766 * buildbot/changes/freshcvsmail.py (FCMaildirSource): ditto
7768 * buildbot/interfaces.py: define the IChangeSource interface
7770 2003-07-26 Brian Warner <warner@lothar.com>
7772 * buildbot/master.py (makeApp): docstring (thanks to Kevin Turner)
7774 2003-06-25 Brian Warner <warner@lothar.com>
7776 * buildbot/status/words.py (IrcStatusBot.emit_last): round off
7779 2003-06-17 Brian Warner <warner@lothar.com>
7781 * buildbot/status/words.py: clean up method usage to avoid error
7782 in silly IRC command
7783 (IrcStatusBot.emit_status): round off seconds display
7785 * buildbot/process/base.py (Build): delete the timer when saving
7786 to the .tap file, and restore it (if it should still be running)
7787 upon restore. This should fix the "next build in -34 seconds"
7788 messages that result when the master is restarted while builds are
7789 sitting in the .waiting slot. If the time for the build has
7790 already passed, start it very soon (in 1 second).
7792 * buildbot/status/words.py: more silly commands
7794 * README (REQUIREMENTS): add URLs to all required software
7796 * buildbot/status/words.py ('last'): mention results of, and time
7799 2003-05-28 Brian Warner <warner@lothar.com>
7801 * buildbot/status/words.py: add 'last' command
7802 (IrcStatusBot.emit_status): add current-small text to 'status' output
7804 * docs/examples/twisted_master.py (twisted_app): turn on IRC bot
7805 (twisted_app): remove spaces from OS-X builder name
7807 * buildbot/master.py (makeApp): add knob to turn on IRC bot
7808 * buildbot/status/words.py: IRC bot should actually be useful now
7810 2003-05-23 Brian Warner <warner@lothar.com>
7812 * buildbot/bot.py (Bot.remote_getSlaveInfo): add routines to get
7813 "slave information" from $(slavedir)/info/* . These files are
7814 maintained by the slave administrator, and describe the
7815 machine/environment that is hosting the slave. Information from
7816 them is put into the "Builder" HTML page. Still need to establish
7817 a set of well-known filenames and meanings for this data: at the
7818 moment, *all* info/* files are sent to the master, but only
7819 'admin' and 'host' are used on that end.
7820 * buildbot/status/html.py (StatusResourceBuilder.body): ditto
7821 * buildbot/process/base.py (Builder.setRemoteInfo): ditto
7822 * buildbot/master.py (BotPerspective.got_info): ditto
7824 2003-05-22 Brian Warner <warner@lothar.com>
7826 * setup.py (version): bump version to 0.3.3+ while between releases
7828 2003-05-21 Brian Warner <warner@lothar.com>
7830 * setup.py: Releasing buildbot-0.3.3
7832 2003-05-21 Brian Warner <warner@lothar.com>
7834 * NEWS: 0.3.3 news items
7836 * README: describe --keepalive and life behind a NAT box
7838 * buildbot/bot.py (Bot.connected): implement application-level
7839 keepalives to deal with NAT timeouts, turn them on with
7840 --keepalive option or when SO_KEEPALIVE doesn't work.
7842 * buildbot/master.py (BotPerspective): accept keepalives silently
7844 * buildbot/process/base.py (Build.buildException): CopiedFailures
7845 don't carry as much information as local ones, so don't try to
7846 create a big HTMLized version of them.
7848 * buildbot/process/step.py (InternalShellCommand.stepFailed): close
7849 log file when step fails due to an exception, such as when the slave
7852 * buildbot/process/step_twisted.py (RunUnitTests): use trial's new
7853 --testmodule argument instead of grepping for test-case-name tags
7854 ourselves. Remove FindUnitTests code.
7855 * buildbot/slavecommand.py, buildbot/bot.py: remove old code
7857 * MANIFEST.in: Add docs/examples, files under test/ . Oops!
7859 2003-05-16 Brian Warner <warner@lothar.com>
7861 * buildbot/process/base.py (BasicBuildFactory): add 'configureEnv'
7862 argument to allow things like CFLAGS=-O0 to be passed without relying
7863 upon /bin/sh processing on the slave.
7865 * buildbot/process/step.py (InternalShellCommand.start): send
7867 * buildbot/slavecommand.py (ShellCommand.start): create argv with
7868 'split' instead of letting /bin/sh do it. This should also remove
7869 the need for /bin/sh on the buildslave, making it more likely to
7872 * buildbot/status/html.py: html-escape text in blamelist.
7873 Add "force build" button to the Builder page.
7875 * buildbot/process/step_twisted.py (countFailedTests): look at
7876 last 1000 characters for status line, as import errors can put it
7877 before the -200 point.
7879 2003-05-15 Brian Warner <warner@lothar.com>
7881 * docs/examples/twisted_master.py: use clobber=0 for remote builds
7883 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7884 make 'clobber' a parameter, so it is possible to have builds which
7885 do full tests but do a cvs update instead of hammering the CVS
7886 server with a full checkout each build
7888 * buildbot/process/step.py (InternalShellCommand): bump default
7889 timeout to 20 minutes
7891 * buildbot/bot.py (Bot.debug_forceBuild): utility method to ask
7892 the master to trigger a build. Run it via manhole.
7894 * buildbot/master.py (BotPerspective.perspective_forceBuild):
7895 allow slaves to trigger any build that they host, to make life
7896 easier for slave admins who are testing out new build processes
7898 * buildbot/process/process_twisted.py (TwistedReactorsBuildFactory):
7899 don't flunk cReactor or qtreactor on failure, since they fail alot
7900 these days. Do warnOnFailure instead.
7902 * buildbot/process/base.py: change Builder.buildable from a list
7903 into a single slot. When we don't have a slave, new builds (once
7904 they make it past the timeout) are now merged into an existing
7905 buildable one instead of being queued. With this change, a slave
7906 which has been away for a while doesn't get pounded with all the
7907 builds it missed, but instead just does a single build.
7909 2003-05-07 Brian Warner <warner@lothar.com>
7911 * setup.py (version): bump version to 0.3.2+ while between releases
7913 2003-05-07 Brian Warner <warner@lothar.com>
7915 * setup.py: Releasing buildbot-0.3.2
7917 2003-05-07 Brian Warner <warner@lothar.com>
7919 * setup.py: fix major packaging error: include subdirectories!
7921 * NEWS: add changes since last release
7923 * README (REQUIREMENTS): update twisted/python dependencies
7925 * buildbot/status/builder.py (Builder.startBuild): change
7926 BuildProcess API: now they should call startBuild/finishBuild
7927 instead of pushing firstEvent / setLastBuildStatus. Moving towards
7928 keeping a list of builds in the statusbag, to support other kinds of
7930 (Builder.addClient): send current-activity-small to new clients
7931 * buildbot/process/base.py (Build.startBuild, .buildFinished): use
7934 * buildbot/status/client.py: drop RemoteReferences at shutdown
7936 * buildbot/status/event.py (Event.stoppedObserving): oops, add it
7938 * buildbot/status/progress.py (BuildProgress.remote_subscribe):
7939 more debug messages for remote status client
7941 * buildbot/process/step.py (InternalBuildStep.stepComplete)
7942 (.stepFailed): only fire the Deferred once, even if both
7943 stepComplete and stepFailed are called. I think this can happen if
7944 an exception occurs at a weird time.
7946 * buildbot/status/words.py: work-in-progress: IRC status delivery
7948 2003-05-05 Brian Warner <warner@lothar.com>
7950 * docs/examples/twisted_master.py (twisted_app): hush internal
7951 python2.3 distutils deprecation warnings
7952 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7953 add compileOpts= argument which inserts extra args before the
7954 "setup.py build_ext" command. This can be used to give -Wignore
7955 warnings, to hush some internal python-2.3 deprecation messages.
7957 * buildbot/process/step_twisted.py (RunUnitTests): parameterize
7958 the ['twisted.test'] default test case to make it easier to change
7961 * buildbot/clients/base.py: switch to pb.Cacheable-style Events
7962 * buildbot/clients/gtkPanes.py: ditto
7964 * buildbot/process/step_twisted.py (RunUnitTests): use randomly=
7965 arg to collapse RunUnitTestsRandomly into RunUnitTests
7966 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
7967 use RunUnitTests(randomly=1) instead of RunUnitTestsRandomly
7969 * buildbot/status/html.py (StatusResource): shuffle Resources
7970 around to fix a bug: both 'http://foo:8080' and 'http://foo:8080/'
7971 would serve the waterfall display, but the internal links were
7972 only valid on the trailing-slash version. The correct behavior is
7973 for the non-slashed one to serve a Redirect to the slashed one.
7974 This only shows up when the buildbot page is hanging off another
7975 server, like a Twisted-Web distributed server.
7977 * buildbot/status/event.py (Event, RemoteEvent): make Events
7978 pb.Cacheable, with RemoteEvent as the cached version. This removes
7979 a lot of explicit send-an-update code.
7980 * buildbot/status/builder.py (Builder): remove send-update code
7981 * buildbot/status/client.py (ClientBuilder): remove send-update
7982 code, and log errors that occur during callRemote (mostly to catch
7983 InsecureJelly exceptions)
7985 * buildbot/process/process_twisted.py (QuickTwistedBuildFactory):
7986 run Lore with the same python used in the rest of the build
7988 * buildbot/process/step_twisted2.py (RunUnitTestsJelly): moved
7990 * buildbot/process/step_twisted.py (HLint): accept 'python'
7991 argument. Catch rc!=0 and mark the step as failed. This marks the
7992 build orange ("has warnings").
7993 (RunUnitTestsJelly): move out to step_twisted2.py
7995 * buildbot/util.py (ignoreStaleRefs): add utility function
7997 * buildbot/master.py (DebugPerspective.perspective_setCurrentState):
7998 don't fake ETA object, it's too hard to get right
8000 2003-05-02 Brian Warner <warner@lothar.com>
8002 * docs/examples/twisted_master.py (twisted_app): add FreeBSD builder
8004 2003-05-01 Brian Warner <warner@lothar.com>
8006 * buildbot/status/html.py (StatusResource.body): oops, I was
8007 missing a <tr>, causing the waterfall page to be misrendered in
8008 everything except Galeon.
8010 2003-04-29 Brian Warner <warner@lothar.com>
8012 * docs/examples/twisted_master.py: make debuild use python-2.2
8013 explicitly, now that Twisted stopped supporting 2.1
8015 * buildbot/process/step_twisted.py (BuildDebs.finishStatus): oops,
8016 handle tuple results too. I keep forgetting this, which suggests
8017 it needs to be rethought.
8019 * setup.py (setup): bump version to 0.3.1+ while between releases
8021 2003-04-29 Brian Warner <warner@lothar.com>
8023 * setup.py: Releasing buildbot-0.3.1
8025 2003-04-29 Brian Warner <warner@lothar.com>
8027 * README (SUPPORT): add plea to send questions to the mailing list
8029 * NEWS, MANIFEST.in: add description of recent changes
8031 * docs/examples/twisted_master.py: add the code used to create the
8032 Twisted buildmaster, with passwords and such removed out to a
8035 * buildbot/changes/changes.py, freshcvs.py, freshcvsmail.py: split
8036 out cvstoys-using bits from generic changes.py, to allow non-cvstoys
8037 buildmasters to not require CVSToys be installed.
8038 * README, docs/examples/glib_master: update to match the change
8040 * buildbot/clients/base.py, buildbot/bot.py,
8041 buildbot/changes/changes.py, buildbot/pbutil.py: copy
8042 ReconnectingPB from CVSToys distribution to remove CVSToys
8043 dependency for build slaves and status clients. Buildmasters which
8044 use FreshCVSSources still require cvstoys be installed, of course.
8046 2003-04-25 Brian Warner <warner@lothar.com>
8048 * buildbot/process/process_twisted.py (FullTwistedBuildFactory): add
8049 runTestsRandomly arg to turn on trial -z
8051 * buildbot/process/step_twisted.py (TwistedJellyTestResults):
8052 experimental code to use trial's machine-parseable output to get
8053 more detailed test results. Still has some major issues.
8054 (RunUnitTestsRandomly): subclass to add "-z 0" option, runs tests
8057 * buildbot/status/builder.py (Builder.setCurrentBuild):
8058 anticipating moving build history into statusbag, not used yet
8060 * buildbot/status/tests.py: code to centralize test results,
8061 doesn't work quite yet
8063 * buildbot/status/event.py (Event): use hasattr("setName") instead
8064 of isinstance for now.. need better long-term solution
8066 * buildbot/status/html.py: Remove old imports
8068 2003-04-24 Brian Warner <warner@lothar.com>
8070 * buildbot/process/process_twisted.py (TwistedBuild.isFileImportant):
8071 ignore changes under doc/fun/ and sandbox/
8073 * buildbot/process/step_twisted.py: update pushEvent and friends.
8075 * buildbot/status/html.py (Box.td): replace event.buildername with
8076 event.parent.getSwappableName(). Needs more thought.
8078 * buildbot/status/builder.py (Builder): Replace pushEvent and
8079 getLastEvent with {set|update|addFileTo|finish}CurrentActivity.
8080 Tell events they are being pruned with event.delete().
8082 * buildbot/process/base.py (Build): Remove Builder status-handling
8083 methods. s/pushEvent/setCurrentActivity/.
8085 * buildbot/process/step.py (BuildStep): clean up status delivery.
8086 Gouse builder.statusbag methods instead of intermediate builder
8087 methods. s/updateLastEvent/updateCurrentActivity/.
8088 s/finalizeLastEvent/finishCurrentActivity/. Use
8089 addFileToCurrentActivity for summaryFunction.
8091 * buildbot/status/event.py (Logfile): put data in a Swappable when
8093 (Event): add more setter methods. Remove .buildername, use .parent
8094 and getSwappableName instead (needs more thought).
8096 * buildbot/util.py (Swappable):
8097 * test/test_swap.py: don't bother setting filename at __init__
8098 time, do it later. Change setFilename args to take parent first,
8099 since it provides the most significant part of the filename.
8101 2003-04-23 Brian Warner <warner@lothar.com>
8103 * buildbot/status/event.py (Logfile.addEntry): append to previous
8106 * buildbot/process/step.py (BuildStep.finalizeLastEvent):
8107 anticipating Swappable
8108 (InternalShellCommand.remoteUpdate): split out various log-adding
8109 methods so subclasses can snarf stdout separately
8111 * buildbot/process/base.py (Builder.finalizeLastEvent): more code
8112 in anticipation of Swappable build logs
8113 (Builder.testsFinished): anticipating TestResults, still disabled
8115 * buildbot/status/builder.py (Builder.pruneEvents): only keep the
8118 * buildbot/status/event.py (Logfile): add (disabled) support for
8119 Swappable, not ready for use yet
8121 * buildbot/util.py (Swappable): object which is swapped out to
8122 disk after some period of no use.
8123 * test/test_swap.py: test buildbot.utils.Swappable
8125 2003-04-14 Brian Warner <warner@lothar.com>
8127 * buildbot/process/base.py (Builder.doPeriodicBuild): add simple
8128 periodic-build timer. Set the .periodicBuildTime on a builder
8129 instance to some number of seconds to activate it.
8131 * buildbot/master.py (BotMaster.forceBuild): change forceBuild API
8133 * buildbot/process/step.py (ShellCommand.finishStatus): use log.msg in
8134 a way that survives result tuples
8136 2003-04-12 Brian Warner <warner@lothar.com>
8138 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
8139 return a dict instead of a tuple: allow summarizers to provide
8140 multiple summaries if they want
8141 * buildbot/process/step_twisted.py (trialTextSummarizer): return dict
8142 (debuildSummarizer): summarize lintian warnings/errors
8144 2003-04-10 Brian Warner <warner@lothar.com>
8146 * README (REQUIREMENTS): slave requires twisted-1.0.4a2
8148 2003-04-09 Brian Warner <warner@lothar.com>
8150 * buildbot/process/step_twisted.py (trialTextSummarizer): Don't create
8151 empty summaries: happens when the tests fail so hard they don't emit
8152 a parseable summary line.
8154 * buildbot/process/step.py (ShellCommand.finishStatusSummary):
8155 Allow summaryFunction to return None to indicate no summary should
8158 * buildbot/status/event.py (Logfile.removeHtmlWatcher): avoid
8159 writing to stale HTTP requests: notice when they disconnect and
8160 remove the request from the list. Also add CacheToFile from
8161 moshez, will be used later.
8163 2003-04-08 Brian Warner <warner@lothar.com>
8165 * buildbot/process/step_twisted.py (ProcessDocs.finished): warnings
8166 should be an int, not a list of strings
8168 * buildbot/changes/changes.py (FreshCVSSource.stop): don't disconnect
8169 if we weren't actually connected
8171 * buildbot/process/step_twisted.py (trialTextSummarizer): function
8172 to show the tail end of the trial text output
8174 * buildbot/process/step.py (ShellCommand.finishStatusSummary): add
8175 hook to summarize the results of a ShellCommand
8177 2003-04-07 Brian Warner <warner@lothar.com>
8179 * buildbot/process/step_twisted.py (RunUnitTests): consolidate all
8180 twisted test suite code into a single class.
8181 * buildbot/process/process_twisted.py: same
8183 2003-04-04 Brian Warner <warner@lothar.com>
8185 * setup.py, MANIFEST.in: hack to make sure plugins.tml gets installed
8187 * README (SLAVE): document use of mktap to create slave .tap file
8188 (REQUIREMENTS): describe dependencies
8190 * buildbot/bb_tap.py, buildbot/plugins.tml:
8191 * buildbot/bot.py (updateApplication): Add mktap support for creating
8192 buildslave .tap files
8194 2003-03-28 Brian Warner <warner@lothar.com>
8196 * buildbot/process/step.py (InternalShellCommand.finished): handle
8197 new tuple result values (fix embarrasing bug that appeared during
8200 2003-03-27 Brian Warner <warner@lothar.com>
8202 * docs/examples/glib_master.py, README: add sample buildmaster.tap
8205 2003-03-25 Brian Warner <warner@lothar.com>
8207 * buildbot/process/step.py (CVS, ShellCommand): add reason for failure
8208 to overall build status
8209 * buildbot/clients/base.py (Builder): improve event printing
8210 * buildbot/process/base.py (BasicBuildFactory): use specific steps
8211 instead of generic ShellCommand
8212 (Build): Add .stopBuild, use it when slave is detached
8214 * buildbot/process/step.py (Configure,Test): give the steps their
8215 own names and status strings
8217 * buildbot/status/html.py (StatusResource): add "show" argument,
8218 lets you limit the set of Builders being displayed.
8220 2003-03-20 Brian Warner <warner@lothar.com>
8222 * buildbot/process/basic.py: removed
8224 2003-03-19 Brian Warner <warner@lothar.com>
8226 * buildbot/process/process_twisted.py (FullTwistedBuildFactory):
8227 turn off process-docs by default
8229 * buildbot/process/base.py (Builder.getBuildNumbered): Don't blow up
8230 when displaying build information without anything in allBuilds[]
8232 * buildbot/bot.py (makeApp): really take password from sys.argv
8234 2003-03-18 Brian Warner <warner@lothar.com>
8236 * buildbot/bot.py (buildApp): take password from sys.argv
8238 * README: replace with more useful text
8240 * setup.py: add a real one
8241 * MANIFEST.in, .cvsignore: more distutils packaging stuff
8243 * docs/PyCon-2003/: added sources for PyCon paper.
8245 * buildbot/process/base.py, step.py: revamp. BuildProcess is gone,
8246 now Build objects control the process and Builder only handles
8247 slave stuff and distribution of changes/status. A new BuildFactory
8248 class creates Build objects on demand.
8250 Created ConfigurableBuild which takes a list of steps to run. This
8251 makes it a lot easier to set up a new kind of build and moves us
8252 closer to being able to configure a build from a web page.
8254 * buildbot/process/step_twisted.py, process_twisted.py: move to
8255 new model. A lot of code went away.
8257 * buildbot/status/progress.py (BuildProgress.newProgress): Don't
8258 send lots of empty progress messages to the client.
8260 * buildbot/master.py (makeApp): enforce builder-name uniqueness
8262 2003-02-20 Brian Warner <warner@lothar.com>
8264 * buildbot/process/step_twisted.py (BuildDebs): count lintian hits
8266 * buildbot/slavecommand.py (ShellCommand): back to usePTY=0. The
8267 Twisted bug that prevented non-pty processes from working just got
8268 fixed, and the bug that leaks ptys is still being investigated.
8270 * buildbot/process/step.py (CVS): send timeout arg to slave
8272 * buildbot/clients/gtkPanes.py: add connection-status row, handle
8273 builders coming and going
8274 * buildbot/clients/base.py: clean up protocol, move to ReconnectingPB
8275 from CVSToys, handle lost-buildmaster
8277 * buildbot/status/client.py (StatusClientService.removeBuilder):
8278 Clean up status client protocol: send builders (with references)
8279 as they are created, rather than sending a list and requiring the
8280 client to figure out which ones are new.
8281 * buildbot/master.py (BotMaster.forceBuild): Log debugclient
8282 attempts to force a build on an unknown builder
8284 2003-02-19 Brian Warner <warner@lothar.com>
8286 * buildbot/slavecommand.py (CVSCommand): add timeout to sub-commands
8287 * buildbot/slavecommand.py (ShellCommand.start): stop using PTYs until
8288 Twisted stops leaking them.
8289 * buildbot/clients/gtkPanes.py (CompactBuilder): forget ETA when the
8290 builder goes to an idle state.
8292 * buildbot/slavecommand.py (ShellCommand.start): bring back PTYs until
8293 I figure out why CVS commands hang without them, and/or I fix the
8294 hung-command timeout
8296 2003-02-16 Brian Warner <warner@lothar.com>
8298 * buildbot/process/step_twisted.py: bin/hlint went away, replace
8299 with 'bin/lore --output lint'. Use 'bin/trial -o' to remove
8300 ansi-color markup. Remove GenerateLore step. Count hlint warnings in
8301 GenerateDocs now that they are prefixed with WARNING:.
8303 * buildbot/status/html.py (StatusResource.body): Fix Builder link,
8304 use manual href target instead of request.childLink
8306 * buildbot/clients/gtkPanes.py: Fix progress countdown: update the
8307 display every second, but update the ETA every 5 seconds (or
8308 whenever) as remote_progress messages arrive.
8311 2003-02-12 Brian Warner <warner@lothar.com>
8313 * *: import current sources from home CVS repository
8317 # add-log-time-format: add-log-iso8601-time-string