forked from buildbot/buildbot
/
ChangeLog
5656 lines (4299 loc) · 226 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
2006-02-17 Brian Warner <warner@lothar.com>
* buildbot/__init__.py (version): Releasing buildbot-0.7.2
* docs/buildbot.texinfo: set version number to match
* NEWS: update for 0.7.2
2006-02-16 Brian Warner <warner@lothar.com>
* docs/buildbot.texinfo (Build Dependencies): add cindex tag
2006-02-09 Brian Warner <warner@lothar.com>
* docs/buildbot.texinfo (How Different VC Systems Specify Sources):
add text to explain per-build branch parameters
* NEWS: mention --umask
2006-02-08 Brian Warner <warner@lothar.com>
* buildbot/scripts/runner.py (Maker.makeSlaveTAC): remove unused
method
(SlaveOptions.optParameters): add --umask, to make it possible to
make buildslave-generated files (including build products) be
world-readable
(slaveTAC): same
* buildbot/slave/bot.py (BuildSlave.startService): same
2006-01-23 Brian Warner <warner@lothar.com>
* buildbot/status/builder.py: urllib.quote() all URLs that include
Builder names, so that builders can include characters like '/'
and ' ' without completely breaking the resulting HTML. Thanks to
Kevin Turner for the patch.
* buildbot/status/html.py: same
* buildbot/test/test_web.py (GetURL.testBuild): match changes
* NEWS: update in preparation for upcoming release
2006-01-18 Brian Warner <warner@lothar.com>
* docs/examples/twisted_master.cfg: update to match the Twisted
buildbot: remove python2.2, switch to exarkun's buildslaves,
disable the .deb builder until we figure out how to build twisted
.debs from SVN, add some ktrace debugging to the OS-X build
process and remove the qt build, remove threadless builders,
change freebsd builder to use landonf's buildslave.
2006-01-12 Brian Warner <warner@lothar.com>
* buildbot/master.py (Manhole.__init__): let port= be a strports
specification string, but handle a regular int for backwards
compatibility. This allows "tcp:12345:interface=127.0.0.1" to be
used in master.cfg to limit connections to just the local host.
(BuildMaster.loadConfig): same for c['slavePortnum']
* buildbot/scheduler.py (Try_Userpass.__init__): same
* buildbot/status/client.py (PBListener.__init__): same
* buildbot/status/html.py (Waterfall.__init__): same, for both
http_port and distrib_port. Include backwards-compatibility checks
so distrib_port can be a filename string and still mean unix:/foo
* docs/buildbot.texinfo (Setting the slaveport): document it
(Debug options): same
(HTML Waterfall): same
(PBListener): same
(try): same
* buildbot/test/test_config.py (ConfigTest): test it
* buildbot/master.py (BuildMaster.loadConfig): wait for the
slaveport's disownServiceParent deferred to fire before opening
the new one. Fixes an annoying bug in the unit tests.
2006-01-03 Brian Warner <warner@lothar.com>
* buildbot/master.py (BuildMaster): remove the .schedulers
attribute, replacing it with an allSchedulers() method that looks
for all IService children that implement IScheduler. Having only
one parent/child relationship means fewer opportunities for bugs.
(BuildMaster.allSchedulers): new method
(BuildMaster.loadConfig_Schedulers): update to use allSchedulers,
also fix ugly bug that caused any config-file reload to
half-forget about the earlier Schedulers, causing an exception
when a Change arrived and was handed to a half-connected
Scheduler. The exception was in scheduler.py line 54ish:
self.parent.submitBuildSet(bs)
exceptions.AttributeError: 'NoneType' object has no attribute
'submitBuildSet'
(BuildMaster.addChange): update to use allSchedulers()
* buildbot/scheduler.py (BaseScheduler.__implements__): fix this
to work properly with twisted-1.3.0, where you must explicitly
include the __implements__ from parent classes
(BaseScheduler.__repr__): make it easier to distinguish distinct
instances
(BaseUpstreamScheduler.__implements__): same
* buildbot/status/builder.py (Status.getSchedulers): update to
use allSchedulers()
* buildbot/test/test_run.py (Run.testMaster): same
* buildbot/test/test_dependencies.py (Dependencies.findScheduler): same
* buildbot/test/test_config.py (ConfigTest.testSchedulers): same,
make sure Scheduler instances are left alone when an identical
config file is reloaded
(ConfigElements.testSchedulers): make sure Schedulers are properly
comparable
* Makefile (TRIALARGS): my local default Twisted version is now
2.1.0, update the trial arguments accordingly
2005-12-22 Brian Warner <warner@lothar.com>
* docs/examples/twisted_master.cfg: merge changes from pyr: add
new win32 builders
* buildbot/scheduler.py (BaseScheduler.addChange): include a dummy
addChange in the parent class, although I suspect this should be
fixed better in the future.
2005-11-26 Brian Warner <warner@lothar.com>
* buildbot/scheduler.py (AnyBranchScheduler.addChange): don't
explode when branch==None, thanks to Kevin Turner for the catch
* buildbot/test/test_scheduler.py (Scheduling.testAnyBranch): test
it
* buildbot/__init__.py (version): bump to 0.7.1+ while between
releases
* docs/buildbot.texinfo: same
2005-11-26 Brian Warner <warner@lothar.com>
* buildbot/__init__.py (version): Releasing buildbot-0.7.1
* docs/buildbot.texinfo: set version number to match
2005-11-26 Brian Warner <warner@lothar.com>
* NEWS: update for 0.7.1
* buildbot/status/builder.py (BuildStepStatus.unsubscribe): make
sure that unsubscribe works even if we never sent an ETA update.
Also, don't explode on duplicate unsubscribe.
(BuildStepStatus.addLog): make the convenience "return self"-added
watcher automatically unsubscribe when the Step finishes.
(BuildStatus.unsubscribe): same handle-duplicate-unsubscribe
(BuildStatus.stepStarted): same auto-unsubscribe
(BuilderStatus.buildStarted): same auto-unsubscribe
* buildbot/interfaces.py (IStatusReceiver.buildStarted): document
auto-unsubscribe
(IStatusReceiver.stepStarted): same
(IStatusReceiver.logStarted): same
* buildbot/test/test_run.py (Status): move the Status test..
* buildbot/test/test_status.py (Subscription): .. to here
2005-11-25 Brian Warner <warner@lothar.com>
* NEWS: more updates
* buildbot/locks.py: fix the problem in which loading a master.cfg
file that changes some Builders (but not all of them) can result
in having multiple copies of the same Lock. Now, the real Locks
are kept in a table inside the BotMaster, and the Builders/Steps
use "LockIDs", which are still instances of MasterLock and
SlaveLock. The real Locks are instances of the new RealMasterLock
and RealSlaveLock classes.
* buildbot/master.py (BotMaster.getLockByID): new method to
convert LockIDs into real Locks.
* buildbot/process/base.py (Build.startBuild): convert LockIDs
into real Locks before building
* buildbot/process/step.py (BuildStep.startStep): same
* buildbot/test/test_locks.py (Locks.testLock1a): add a test which
exercises the problem
* docs/buildbot.texinfo (Scheduler Types): give a few hints about
what Schedulers are available
* buildbot/scheduler.py (Nightly): add new Scheduler based upon
work by Dobes Vandermeer and hacked mercilessly by me. This offers
'cron'-style build scheduling at certain times of day, week,
month, or year.
* buildbot/test/test_scheduler.py (Scheduling.testNightly): test it
* buildbot/scheduler.py (Scheduler): change fileIsImportant
handling: treat self.fileIsImportant more as an attribute that
contains a callable than as a method. If the attribute is None,
don't call it and assume all filenames are important. It is still
possible to provide a fileIsImportant method in a subclass,
however.
(AnyBranchScheduler): handle fileIsImportant=None, previously it
was broken
* buildbot/test/test_scheduler.py (Scheduling.testAnyBranch2):
test using AnyBranchScheduler with fileIsImportant=None
2005-11-24 Brian Warner <warner@lothar.com>
* buildbot/test/test_config.py (StartService): don't claim a fixed
port number, instead set slavePort=0 on the first pass, figure out
what port was allocated, then switch to a config file that uses
the allocated port.
* buildbot/master.py (BuildMaster.loadConfig): close the old
slaveport before opening the new one, because unit tests might
replace slavePort=0 with the same allocated portnumber, and if we
don't wait for the old port to close first, we get a "port already
in use" error. There is a tiny race condition here, but the only
threat is from other programs that bind (statically) to the same
port number we happened to be allocated, and only if those
programs use SO_REUSEADDR, and only if they get control in between
reactor turns.
* Makefile (TRIALARGS): update to handle Twisted > 2.1.0
* buildbot/master.py (BuildMaster.loadConfig_Sources): remove all
deleted ChangeSources before adding any new ones
* buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): fix
compare_attrs, to make sure that a config-file reload does not
unnecessarily replace an unmodified ChangeSource instance
* buildbot/test/test_config.py (ConfigTest.testSources): update
* buildbot/scheduler.py (AnyBranchScheduler): fix branches=[] to
mean "don't build anything", and add a warning if it gets used
because it isn't actually useful.
* contrib/svn_buildbot.py: update example usage to match the port
number that gets used by the PBChangeSource
* buildbot/scripts/sample.cfg: add example of PBChangeSource
2005-11-22 Brian Warner <warner@lothar.com>
* NEWS: start collecting items for next release
* buildbot/process/step.py (SVN.computeSourceRevision): assume
revisions are strings
(P4Sync.computeSourceRevision): same
* buildbot/status/html.py (StatusResourceBuild.body): add a link
to the Buildbot's overall status page
(StatusResourceBuilder.body): same
2005-11-15 Brian Warner <warner@lothar.com>
* buildbot/master.py (BuildMaster.loadConfig): serialize the
config-file loading, specifically to make sure old StatusTargets
are finished shutting down before new ones start up (thus
resolving a bug in which changing the Waterfall object would fail
because both new and old instances were claiming the same
listening port). Also load new Schedulers after all the new
Builders are set up, in case they fire off a new build right away.
* buildbot/test/test_config.py (StartService): test it
* buildbot/status/mail.py (MailNotifier.buildMessage): oops, add
the branch name to the mail body
* buildbot/changes/pb.py (PBChangeSource.compare_attrs): add this.
Without it, a config-file reload fails to update an existing
PBChangeSource.
* buildbot/changes/freshcvs.py (FreshCVSSourceNewcred): add
username/passwd to compare_attrs, for the same reason
* buildbot/status/html.py (Waterfall): add favicon to
compare_attrs, same reason
2005-11-05 Brian Warner <warner@lothar.com>
* buildbot/scripts/tryclient.py (createJobfile): stringify the
baserev before stuffing it in the jobfile. This resolves problems
under SVN (and probably Arch) where revisions are expressed as
numbers. I'm inclined to use string-based revisions everywhere in
the future, but this fix should be safe for now. Thanks to Steven
Walter for the patch.
* buildbot/changes/changes.py (ChangeMaster.saveYourself): use
binary mode when opening pickle files, to make windows work
better. Thanks to Dobes Vandermeer for the catch.
* buildbot/status/builder.py (BuildStatus.saveYourself): same
(BuilderStatus.getBuildByNumber): same
(Status.builderAdded): same
* buildbot/master.py (BuildMaster.loadChanges): same
* buildbot/util.py (Swappable): delete unused leftover code
* buildbot/process/step.py (SVN): when building on a non-default
branch, add the word "[branch]" to the VC step's description, so
it is obvious that we're not building the usual stuff. Likewise,
when we are building a specific revision, add the text "rNNN" to
indicate what that revision number is. Thanks to Brad Hards and
Nathaniel Smith for the suggestion.
(Darcs.startVC): same
(Arch.startVC): same
(Bazaar.startVC): same
* buildbot/process/factory.py (GNUAutoconf.__init__): fix a silly
typo, caught by Mark Dillavou, closes SF#1216636.
* buildbot/test/test_status.py (Log.TODO_testDuplicate): add notes
about a test to add some day
* docs/examples/twisted_master.cfg: update: bot1 can now handle
the 'full-2.3' build, and the 'reactors' build is now run under
python-2.4 because the buildslave no longer has gtk/etc bindings
for earlier versions.
2005-11-03 Brian Warner <warner@lothar.com>
* buildbot/interfaces.py (IBuilderControl.resubmitBuild): new
method, takes an IBuildStatus and rebuilds it. It might make more
sense to add this to IBuildControl instead, but that instance goes
away completely once the build has finished, and resubmitting
builds can take place weeks later.
* buildbot/process/builder.py (BuilderControl.resubmitBuild): same
* buildbot/status/html.py (StatusResourceBuild): also stash an
IBuilderControl so we can use resubmitBuild.
(StatusResourceBuild.body): render "resubmit" button if we can.
Also add hrefs for each BuildStep
(StatusResourceBuild.rebuild): add action for "resubmit" button
(StatusResourceBuilder.getChild): give it an IBuilderControl
* buildbot/status/builder.py (Status.getURLForThing): change the
URL for BuildSteps to have a "step-" prefix, so the magic URLs
that live as targets of buttons like "stop" and "rebuild" can't
collide with them.
* buildbot/status/builder.py (Status.getURLForThing): same
* buildbot/status/html.py (StatusResourceBuild.getChild): same
(StepBox.getBox): same
* buildbot/test/test_web.py (GetURL): same
(Logfile): same
* buildbot/process/step.py (SVN.__init__): put svnurl/baseURL
exclusivity checks after Source.__init__ upcall, so misspelled
arguments will be reported more usefully
(Darcs.__init__): same
2005-10-29 Brian Warner <warner@lothar.com>
* docs/examples/twisted_master.cfg: don't double-fire the 'quick'
builder. Move the Try scheduler off to a separate port.
2005-10-27 Brian Warner <warner@lothar.com>
* buildbot/clients/gtkPanes.py
(TwoRowClient.remote_builderRemoved): disappearing Builders used
to cause the app to crash, now they don't.
* buildbot/clients/debug.py: display the buildmaster's location
in the window's title bar
2005-10-26 Brian Warner <warner@lothar.com>
* buildbot/status/mail.py (MailNotifier): urllib.escape the URLs
in case they have spaces or whatnot. Patch from Dobes Vandermeer.
* buildbot/test/test_status.py (MyStatus.getURLForThing): fix it
* buildbot/status/html.py (td): put a single non-breaking space
inside otherwise empty <td> elements, as a workaround for buggy
browsers which would optimize them away (along with any associated
styles, like the kind that create the waterfall grid borders).
Patch from Frerich Raabe.
* buildbot/process/step_twisted.py (Trial): expose the trialMode=
argv-list as an argument, defaulting to ["-to"], which is
appropriate for the Trial that comes with Twisted-2.1.0 and
earlier. The Trial in current Twisted SVN wants
["--reporter=bwverbose"] instead. Also expose trialArgs=, which
defaults to an empty list.
* buildbot/process/process_twisted.py (TwistedTrial.trialMode):
match it, now that trialMode= is a list instead of a single string
* buildbot/__init__.py (version): bump to 0.7.0+ while between
releases
* docs/buildbot.texinfo: same
2005-10-24 Brian Warner <warner@lothar.com>
* buildbot/__init__.py (version): Releasing buildbot-0.7.0
* docs/buildbot.texinfo: set version number to match
2005-10-24 Brian Warner <warner@lothar.com>
* README: update for 0.7.0
* NEWS: same
* docs/buildbot.texinfo: move the freshcvs stuff out of the README
* buildbot/clients/debug.glade: add 'branch' box to fake-commit
* buildbot/clients/debug.py (DebugWidget.do_commit): same. Don't
send the branch= argument unless the user really provided one, to
retain compatibility with older buildmasters that don't accept
that argument.
* buildbot/master.py (DebugPerspective.perspective_fakeChange):
same
* docs/buildbot.texinfo: update lots of stuff
* buildbot/scripts/runner.py (sendchange): add a --branch argument
to the 'buildbot sendchange' command
* buildbot/clients/sendchange.py (Sender.send): same
* buildbot/changes/pb.py (ChangePerspective): same
* buildbot/test/test_changes.py (Sender.testSender): test it
* buildbot/process/step.py (SVN.__init__): change 'base_url' and
'default_branch' argument names to 'baseURL' and 'defaultBranch',
for consistency with other BuildStep arguments that use camelCase.
Well, at least more of them use camelCase (like flunkOnWarnings)
than don't.. I wish I'd picked one style and stuck with it
earlier. Annoying, but it's best done before the release, since
these arguments didn't exist at all in 0.6.6 .
(Darcs): same
* buildbot/test/test_vc.py (SVN.testCheckout): same
(Darcs.testPatch): same
* docs/buildbot.texinfo (SVN): document the change
(Darcs): same, add some build-on-branch docs
* docs/examples/twisted_master.cfg: match change
* buildbot/process/step.py (BuildStep): rename
slaveVersionNewEnough to slaveVersionIsOlderThan, because that's
how it is normally used.
* buildbot/test/test_steps.py (Version.checkCompare): same
* buildbot/process/step.py (CVS.startVC): refuse to build
update/copy -style builds on a non-default branch with an old
buildslave (<=0.6.6) that doesn't know how to do it properly. The
concern is that it will do a VC 'update' in an existing tree when
it is supposed to be switching branches (and therefore clobbering
the tree to do a full checkout), thus building the wrong source.
This used to be a warning, but I think the confusion it is likely
to cause warrants making it an error.
(SVN.startVC): same, also make mode=export on old slaves an error
(Darcs.startVC): same
(Git.startVC): improve error message for non-Git-enabled slaves
(Arch.checkSlaveVersion): same. continue to emit a warning when a
specific revision is built on a slave that doesn't pay attention
to args['revision'], because for slowly-changing trees it will
probably do the right thing, and because we have no way to tell
whether we're asking it to build the most recent version or not.
* buildbot/interfaces.py (BuildSlaveTooOldError): new exception
* buildbot/scripts/runner.py (SlaveOptions.postOptions): assert
that 'master' is in host:portnum format, to catch errors sooner
2005-10-23 Brian Warner <warner@lothar.com>
* buildbot/process/step_twisted.py (ProcessDocs.createSummary):
when creating the list of warning messages, include the line
immediately after each WARNING: line, since that's usually where
the file and line number wind up.
* docs/examples/twisted_master.cfg: OS-X slave now does QT, add a
TryScheduler
* NEWS: update
2005-10-22 Brian Warner <warner@lothar.com>
* buildbot/status/html.py (HtmlResource): incorporate valid-HTML
patch from Brad Hards
* buildbot/status/classic.css: same
* buildbot/test/test_web.py (Waterfall): match changes
* buildbot/test/test_steps.py (BuildStep.setUp): set
nextBuildNumber so the test passes
* buildbot/test/test_status.py (MyBuilder): same
* buildbot/status/html.py (StatusResourceBuild.body): revision
might be numeric, so stringify it before html-escapifying it
(CurrentBox.getBox): add a "waiting" state, and show a countdown
timer for the upcoming build
* buildbot/status/classic.css: add background-color attributes for
offline/waiting/building classes
* buildbot/status/builder.py (BuildStatus): derive from
styles.Versioned, fix upgrade of .sourceStamp attribute. Also set
the default (i.e. unknown) .slavename to "???" instead of None,
since even unknown slavenames need to be printed eventually.
(BuilderStatus): also derive from styles.Versioned . More
importantly, determine .nextBuildNumber at creation/unpickling
time by scanning the directory of saved BuildStatus instances and
choosing one larger than the highest-numbered one found. This
should fix the problem where random errors during upgrades cause
the buildbot to forget about earlier builds. .nextBuildNumber is
no longer stored in the pickle.
(Status.builderAdded): if we can't unpickle the BuilderStatus,
at least log the error. Also call Builder.determineNextBuildNumber
once the basedir is set.
* buildbot/master.py (BuildMaster.loadChanges): do
styles.doUpgrade afterwards, in case I decide to make Changes
derived from styles.Versioned some day and forget to make this
change later.
* buildbot/test/test_runner.py (Options.testForceOptions): skip
when running under older pythons (<2.3) in which the shlex module
doesn't have a 'split' function.
* buildbot/process/step.py (ShellCommand.start): make
errorMessages= be a list of strings to stuff in the log before the
command actually starts. This makes it easier to flag multiple
warning messages, e.g. when the Source steps have to deal with an
old buildslave.
(CVS.startVC): handle slaves that don't handle multiple branches
by switching into 'clobber' mode
(SVN.startVC): same. Also reject branches without base_url
(Darcs.startVC): same. Also reject revision= in older slaves
(Arch.checkSlaveVersion): same (just the multiple-branches stuff)
(Bazaar.startVC): same, and test for baz separately than for arch
* buildbot/slave/commands.py (cvs_ver): document new features
* buildbot/process/step.py (BuildStep.slaveVersion): document it
(BuildStep.slaveVersionNewEnough): more useful utility method
* buildbot/test/test_steps.py (Version): start testing it
* buildbot/status/words.py (IrcStatusBot.command_FORCE): note that
the 'force' command requires python2.3, for the shlex.split method
* docs/examples/twisted_master.cfg: remove old freshcvs stuff,
since we don't use it anymore. The Twisted buildbot uses a
PBChangeSource now.
2005-10-21 Brian Warner <warner@lothar.com>
* buildbot/process/process_twisted.py: rework all BuildFactory
classes to take a 'source' step as an argument, instead of
building up the SVN instance in the factory.
* docs/examples/twisted_master.cfg: enable build-on-branch by
providing a base_url and default_branch
* buildbot/status/words.py (IrcStatusBot.command_FORCE): add
control over --branch and --revision, not that they are always
legal to provide
* buildbot/status/html.py (StatusResourceBuilder.force): same
(StatusResourceBuild.body): display SourceStamp components
* buildbot/scripts/runner.py (ForceOptions): option parser for the
IRC 'force' command, so it can be shared with an eventual
command-line-tool 'buildbot force' mode.
* buildbot/test/test_runner.py (Options.testForceOptions): test it
2005-10-20 Brian Warner <warner@lothar.com>
* buildbot/status/mail.py (MailNotifier.buildMessage): reformat
* docs/examples/twisted_master.cfg: update to use Schedulers
* buildbot/scripts/sample.cfg: update with Schedulers
* buildbot/interfaces.py (IBuilderControl.requestBuildSoon): new
method specifically for use by HTML "force build" button and the
IRC "force" command. Raises an immediate error if there are no
slaves available.
(IBuilderControl.requestBuild): make this just submit a build, not
try to check for existing slaves or set up any when-finished
Deferreds or anything.
* buildbot/process/builder.py (BuilderControl): same
* buildbot/status/html.py (StatusResourceBuilder.force): same
* buildbot/status/words.py (IrcStatusBot.command_FORCE): same
* buildbot/test/test_slaves.py: same
* buildbot/test/test_web.py: same
2005-10-19 Brian Warner <warner@lothar.com>
* docs/examples/twisted_master.cfg: re-sync with reality: bring
back python2.2 tests, turn off OS-X threadedselect-reactor tests
2005-10-18 Brian Warner <warner@lothar.com>
* buildbot/status/html.py: provide 'status' argument to most
StatusResourceFOO objects
(StatusResourceBuild.body): href-ify the Builder name, add "Steps
and Logfiles" section to make the Build page into a more-or-less
comprehensive source of status information about the build
* buildbot/status/mail.py (MailNotifier): include the Build's URL
* buildbot/status/words.py (IrcStatusBot.buildFinished): same
2005-10-17 Brian Warner <warner@lothar.com>
* buildbot/process/process_twisted.py (TwistedTrial): update Trial
arguments to accomodate Twisted >=2.1.0 . I will have to figure
out what to do about other projects: the correct options for
recent Twisteds will not work for older ones.
2005-10-15 Brian Warner <warner@lothar.com>
* buildbot/status/builder.py (Status.getURLForThing): add method
to provide a URL for arbitrary IStatusFoo objects. The idea is to
use this in email/IRC status clients to make them more useful, by
providing the end user with hints on where to learn more about the
object being reported on.
* buildbot/test/test_web.py (GetURL): tests for it
2005-10-14 Brian Warner <warner@lothar.com>
* buildbot/test/test_config.py (ConfigTest._testSources_1): oops,
fix bug resulting from deferredResult changes
2005-10-13 Brian Warner <warner@lothar.com>
* buildbot/test/test_changes.py: remove use of deferredResult
* buildbot/test/test_config.py: same
* buildbot/test/test_control.py: same
* buildbot/test/test_status.py: same
* buildbot/test/test_vc.py: this is the only remaining use, since
it gets used at module level. This needs to be replaced by some
sort of class-level run-once routine.
* buildbot/status/words.py (IrcStatusBot.command_WATCH): fix typo
* lots: implement multiple slaves per Builder, which means multiple
current builds per Builder. Some highlights:
* buildbot/interfaces.py (IBuilderStatus.getState): return a tuple
of (state,currentBuilds) instead of (state,currentBuild)
(IBuilderStatus.getCurrentBuilds): replace getCurrentBuild()
(IBuildStatus.getSlavename): new method, so you can tell which
slave got used. This only gets set when the build completes.
(IBuildRequestStatus.getBuilds): new method
* buildbot/process/builder.py (SlaveBuilder): add a .state
attribute to track things like ATTACHING and IDLE and BUILDING,
instead of..
(Builder): .. the .slaves attribute here, which has been turned
into a simple list of available slaves. Added a separate
attaching_slaves list to track ones that are not yet ready for
builds.
(Builder.fireTestEvent): put off the test-event callback for a
reactor turn, to make tests a bit more consistent.
(Ping): cleaned up the slaveping a bit, now it disconnects if the
ping fails due to an exception. This needs work, I'm worried that
a code error could lead to a constantly re-connecting slave.
Especially since I'm trying to move to a distinct remote_ping
method, separate from the remote_print that we currently use.
(BuilderControl.requestBuild): return a convenience Deferred that
provides an IBuildStatus when the build finishes.
(BuilderControl.ping): ping all connected slaves, only return True
if they all respond.
* buildbot/slave/bot.py (BuildSlave.stopService): stop trying to
reconnect when we shut down.
* buildbot/status/builder.py: implement new methods, convert
one-build-at-a-time methods to handle multiple builds
* buildbot/status/*.py: do the same in all default status targets
* buildbot/status/html.py: report the build's slavename in the
per-Build page, report all buildslaves on the per-Builder page
* buildbot/test/test_run.py: update/create tests
* buildbot/test/test_slaves.py: same
* buildbot/test/test_scheduler.py: remove stale test
* docs/buildbot.texinfo: document the new builder-specification
'slavenames' parameter
2005-10-12 Brian Warner <warner@lothar.com>
* buildbot/buildset.py (BuildSet): fix bug where BuildSet did not
report failure correctly, causing Dependent builds to run when
they shouldn't have.
* buildbot/status/builder.py (BuildSetStatus): same
* buildbot/test/test_buildreq.py (Set.testBuildSet): verify it
(Set.testSuccess): test the both-pass case too
* buildbot/test/test_dependencies.py (Dependencies.testRun_Fail):
fix this test: it was ending too early, masking the failure before
(Logger): specialized StatusReceiver to make sure the dependent
builds aren't even started, much less completed.
2005-10-07 Brian Warner <warner@lothar.com>
* buildbot/slave/bot.py (SlaveBuilder.activity): survive
bot.SlaveBuilder being disowned in the middle of a build
* buildbot/status/base.py (StatusReceiverMultiService): oops, make
this inherit from StatusReceiver. Also upcall in __init__. This
fixes the embarrasing crash when the new buildSetSubmitted method
is invoked and Waterfall/etc don't implement their own.
* buildbot/test/test_run.py: add a TODO note about a test to catch
just this sort of thing.
* buildbot/process/builder.py (Builder.attached): remove the
already-attached warning, this situation is normal. Add some
comments explaining it.
2005-10-02 Brian Warner <warner@lothar.com>
* buildbot/changes/maildir.py (Maildir.start): Tolerate
OverflowError when setting up dnotify, because some 64-bit systems
have problems with signed-vs-unsigned constants and trip up on the
DN_MULTISHOT flag. Patch from Brad Hards.
2005-09-06 Fred Drake <fdrake@users.sourceforge.net>
* buildbot/process/step.py (BuildStep, ShellCommand): Add
progressMetrics, description, descriptionDone to the 'parms' list,
and make use the 'parms' list from the implementation class
instead of only BuildStep to initialize the parameters. This
allows buildbot.process.factory.s() to initialize all the parms,
not just those defined in directly by BuildStep.
2005-09-03 Brian Warner <warner@lothar.com>
* NEWS: start adding items for the next release
* docs/examples/twisted_master.cfg: (sync with reality) turn off
python2.2 tests, change 'Quick' builder to only use python2.3
2005-09-02 Fred Drake <fdrake@users.sourceforge.net>
* buildbot/status/html.py (StatusResourceBuilder.body): only show
the "Ping Builder" button if the build control is available; the
user sees an exception otherwise
* docs/buildbot.texinfo (PBChangeSource): fix a typo
2005-09-01 Brian Warner <warner@lothar.com>
* buildbot/interfaces.py (IBuilderStatus.getState): update
signature, point out that 'build' can be None
(IBuildStatus.getETA): point out ETA can be none
* buildbot/status/html.py (CurrentBox.getBox): tolerate build/ETA
being None
* buildbot/status/words.py (IrcStatusBot.emit_status): same
2005-08-31 Brian Warner <warner@lothar.com>
* buildbot/status/base.py (StatusReceiver.builderChangedState):
update to match correct signature: removed 'eta' argument
* buildbot/status/mail.py (MailNotifier.builderChangedState): same
2005-08-30 Brian Warner <warner@lothar.com>
* buildbot/status/builder.py (LogFile): remove the assertion that
blows up when you try to overwrite an existing logfile, instead
just emit a warning. This case gets hit when the buildmaster is
killed and doesn't get a chance to write out the serialized
BuilderStatus object, so the .nextBuildNumber attribute gets out
of date.
* buildbot/scripts/runner.py (sendchange): add --revision_file to
the 'buildbot sendchange' arguments, for the Darcs context file
* docs/buildbot.texinfo (sendchange): document it
* buildbot/status/html.py: add pending/upcoming builds to CurrentBox
* buildbot/interfaces.py (IScheduler.getPendingBuildTimes): new method
(IStatus.getSchedulers): new method
* buildbot/status/builder.py (BuilderStatus): track pendingBuilds
(Status.getSchedulers): implement
* buildbot/process/builder.py (Builder): maintain
BuilderStatus.pendingBuilds
* buildbot/scheduler.py (Scheduler.getPendingBuildTimes): new method
(TryBase.addChange): Try schedulers should ignore Changes
* buildbot/scripts/tryclient.py (getTopdir): implement getTopdir
for 'try' on CVS/SVN
* buildbot/test/test_runner.py (Try.testGetTopdir): test case
* buildbot/scripts/tryclient.py (Try): make jobdir-style 'try'
report status properly.
(Try.createJob): implement unique buildset IDs
* buildbot/status/client.py (StatusClientPerspective): add a
perspective_getBuildSets method for the benefit of jobdir-style
'try'.
* docs/buildbot.texinfo (try): more docs
* buildbot/test/test_scheduler.py (Scheduling.testGetBuildSets):
new test case
2005-08-18 Brian Warner <warner@lothar.com>
* buildbot/scripts/tryclient.py (Try): make 'try' status reporting
actually work. It's functional but still kind of clunky. Also, it
only works with the pb-style.. needs to be made to work with the
jobdir-style too.
* buildbot/status/client.py (RemoteBuildSet): new class
(RemoteBuildRequest): same
(RemoteBuild.remote_waitUntilFinished): return the RemoteBuild
object, not the internal BuildStatus object.
(RemoteBuild.remote_subscribe): new method to subscribe to builds
outside of the usual buildStarted() return value.
(BuildSubscriber): support class for RemoteBuild.remote_subscribe
* buildbot/scheduler.py (Try_Jobdir): convey buildsetID properly
(Try_Userpass_Perspective.perspective_try): return a remotely
usable BuildSetStatus object
* buildbot/interfaces.py (IBuildStatus): remove obsolete
isStarted()/waitUntilStarted()
2005-08-16 Brian Warner <warner@lothar.com>
* buildbot/status/builder.py: implement IBuildSetStatus and
IBuildRequestStatus, wire them into place.
* buildbot/buildset.py: same. Add ID, move wait-until-finished
methods into the BuildSetStatus object.
* buildbot/interfaces.py: same
(IStatus.getBuildSets): new method to get pending BuildSets
(IStatusReceiver.buildsetSubmitted): new method which hears about
new BuildSets
* buildbot/master.py (BuildMaster.submitBuildSet): same
* buildbot/process/base.py (BuildRequest): same, replace
waitUntilStarted with subscribe/unsubscribe
* buildbot/process/builder.py (BuilderControl.forceBuild): use
subscribe instead of waitUntilStarted
* buildbot/status/base.py (StatusReceiver.buildsetSubmitted): stub
for new method
* buildbot/status/client.py (StatusClientPerspective.builderRemoved):
same
* buildbot/test/test_buildreq.py: update for new code
* buildbot/test/test_control.py (Force.testRequest): same
* buildbot/slave/commands.py (Darcs.doVCFull): fix get-revision
for Darcs to not use the tempfile module, so it works under
python-2.2 too. We really didn't need the full cleverness of that
module, since the slave has exclusive control of its own builddir.
2005-08-15 Brian Warner <warner@lothar.com>
* buildbot/scripts/tryclient.py (CVSExtractor): implement 'try'
for CVS trees. It doesn't work for non-trunk branches,
unfortunately.
* buildbot/test/test_vc.py (CVS.testTry): test it, but skip the
branch test
* Makefile: make it easier to test against python2.2
* buildbot/test/test_vc.py (VCBase.tearDown): provide for
tearDown2, so things like Arch can unregister archives as they're
shutting down. The previous subclass-override-tearDown technique
resulted in a nested maybeWait() and test failures under
Twisted-1.3.0
* buildbot/scripts/tryclient.py (getSourceStamp): extract branches
where we can (Arch), add a branch= argument to set the branch used
when we can't
(BazExtractor): extract the branch too
(TlaExtractor): same
* buildbot/scripts/runner.py (TryOptions): add --branch
* docs/buildbot.texinfo (try): document --branch/try_branch
* buildbot/slave/commands.py (Darcs): implement get-revision for
Darcs, so that 'try' will work. This requires the tempfile module
from python-2.3 .
* buildbot/test/test_vc.py: rewrite tests, getting better coverage
of revisions, branches, and 'try' in the process.
2005-08-11 Brian Warner <warner@lothar.com>
* buildbot/master.py (DebugPerspective.perspective_pokeIRC): fix
this, it got broken at some point in the last few releases
* buildbot/status/words.py (IrcBuildRequest): reply was broken
(IrcStatusBot.emit_status): handle new IBuilderStatus.getState,
specifically the removal of ETA information from the tuple
* buildbot/locks.py: use %d for id() instead of %x, avoid a silly
warning message
* docs/buildbot.texinfo (try): document both --builder and
'try_builders' in .buildbot/options
* buildbot/scripts/runner.py (TryOptions): add --builder,
accumulate the values into opts['builders']
* buildbot/scripts/tryclient.py (Try.__init__): set builders
* buildbot/test/test_runner.py (Try): add some quick tests to make
sure 'buildbot try --options' and .buildbot/options get parsed
* buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
use --builder control
* docs/buildbot.texinfo (try): add --port argument to PB style
* buildbot/scripts/tryclient.py (SourceStampExtractor): return an
actual SourceStamp. Still need to extract a branch name, somehow.
(Try): finish implementing the try client side, still need a UI
for specifying which builders to use
(Try.getopt): factor our options/config-file reading
* buildbot/test/test_scheduler.py (Scheduling.testTryUserpass):
test it
* buildbot/test/test_vc.py: match SourceStampExtractor change
* buildbot/scripts/runner.py (Options.opt_verbose): --verbose
causes the twisted log to be sent to stderr
* buildbot/scheduler.py (Try_Userpass): implement the PB style
2005-08-10 Brian Warner <warner@lothar.com>
* buildbot/scripts/runner.py: Add 'buildbot try' command, jobdir
style is 90% done, still missing status reporting or waiting for
the buildsets to finish, and it is completely untested.
* buildbot/trybuild.py: delete file, move contents to ..
* buildbot/scripts/tryclient.py (getSourceStamp): .. here
* buildbot/test/test_vc.py: match the move
* buildbot/scheduler.py (Try_Jobdir): implement the jobdir style
of the TryScheduler, no buildsetID or status-tracking support yet
* buildbot/test/test_scheduler.py (Scheduling.testTryJobdir): test it
* buildbot/changes/maildir.py (Maildir.setBasedir): make it
possible to set the basedir after __init__ time, so it is easier
to use as a Service-child of the BuildMaster instance
* buildbot/changes/maildirtwisted.py (MaildirService): make a form
that delivers messages to its Service parent instead of requiring
a subclass to be useful. This turns out to be much easier to build
unit tests around.
* buildbot/scripts/tryclient.py (createJob): utility code to
create jobfiles, will eventually be used by 'buildbot try'
2005-08-08 Brian Warner <warner@lothar.com>
* docs/buildbot.texinfo (try): add docs on the
as-yet-unimplemented Try scheduler
* buildbot/test/test_buildreq.py: move Scheduling tests out to ..
* buildbot/test/test_scheduler.py: .. here
(Scheduling.testTryJobdir): add placeholder test for 'try'
* buildbot/test/test_status.py (Log.testMerge3): update to match new
addEntry merging (>=chunkSize) behavior
(Log.testConsumer): update to handle new callLater(0) behavior
* buildbot/test/test_web.py: rearrange tests a bit, add test for
both the MAX_LENGTH bugfix and the resumeProducing hang.
* buildbot/status/builder.py (LogFileProducer.resumeProducing):
put off the actual resumeProducing for a moment with
reactor.callLater(0). This works around a twisted-1.3.0 bug which
causes large logfiles to hang midway through.
* buildbot/process/step.py (BuildStep.addCompleteLog): break the
logfile up into chunks, both to avoid NetstringReceiver.MAX_LENGTH
and to improve memory usage when streaming the file out to a web
browser.
* buildbot/status/builder.py (LogFile.addEntry): change > to >= to
make this work cleanly
2005-08-03 Brian Warner <warner@lothar.com>
* buildbot/trybuild.py: new file for 'try' utilities
(getSourceStamp): run in a tree, find out the baserev+patch
* buildbot/test/test_vc.py (VCBase.do_getpatch): test it,
implemented for SVN and Darcs, still working on Arch. I don't know
how to make CVS work yet.
* docs/buildbot.texinfo: document the 'buildbot' command-line
tool, including the not-yet-implemented 'try' feature, and the
in-flux .buildbot/ options directory.
2005-07-20 Brian Warner <warner@lothar.com>
* buildbot/locks.py: added temporary id() numbers to Lock
descriptions, to track down a not-really-sharing-the-Lock bug
* buildbot/test/runutils.py: must import errno, cut-and-paste bug
* buildbot/test/test_slavecommand.py (ShellBase.failUnlessIn):
needed for python2.2 compatibility
* buildbot/test/test_vc.py: python2.2 compatibility: generators
are from the __future__
2005-07-19 Brian Warner <warner@lothar.com>
* buildbot/master.py (BuildMaster.loadConfig): give a better error
message when schedulers use unknown builders
* buildbot/process/builder.py (Builder.compareToSetup): make sure
SlaveLock('name') and MasterLock('name') are distinct
* buildbot/master.py (BuildMaster.loadConfig): oops, sanity-check
c['schedulers'] in such a way that we can actually accept
Dependent instances
* buildbot/test/test_config.py: check it
* buildbot/scheduler.py (Dependent.listBuilderNames): oops, add
utility method to *all* the Schedulers
(Periodic.listBuilderNames): same
* docs/buildbot.texinfo (Interlocks): update chapter to match
reality
* buildbot/master.py (BuildMaster.loadConfig): Add sanity checks
to make sure that c['sources'], c['schedulers'], and c['status']
are all lists of the appropriate objects, and that the Schedulers
all point to real Builders
* buildbot/interfaces.py (IScheduler, IUpstreamScheduler): add
'listBuilderNames' utility method to support this
* buildbot/scheduler.py: implement the utility method
* buildbot/test/test_config.py (ConfigTest.testSchedulers): test it
* docs/buildbot.texinfo: add some @cindex entries
* buildbot/test/test_vc.py (Arch.createRepository): set the tla ID
if it wasn't already set: most tla commands will fail unless one
has been set.
(Arch.createRepository): and disable bazaar's revision cache, since
they cause test failures (the multiple repositories we create all
interfere with each other through the cache)
* buildbot/test/test_web.py (WebTest): remove use of deferredResult,
bring it properly up to date with twisted-2.0 test guidelines