DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Untracked file

Line Code
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 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406
User visible changes in Buildbot.             -*- outline -*-

* Release 0.7.9 (15 Sep 2008)

** New Features

*** Configurable public_html directory (#162)

The public_html/ directory, which provides static content for the WebStatus()
HTTP server, is now configurable. The default location is still the
public_html/ subdirectory of the buildmaster's base directory, but you can
change this by passing a suitable argument when creating the WebStatus()
instance in your master.cfg file:

  c['status'].append( WebStatus(8080, public_html="/var/www/buildbot") )

*** Lock access modes (#313)

Albert Hofkamp added code to provide two distinct access modes to Locks:
"counting" and "exclusive". Locks can accept a configurable number of
"counting"-mode users, or a single "exclusive"-mode. For example, a Lock is
defined with maxCount=3, and then a 'compile' BuildStep uses this lock in
counting mode, while a 'cleanup' BuildStep uses this lock in exclusive mode.
Then, there can be one, two, or three simultaneous Builds in the compile step
(as long as there are no builds in the cleanup step). Only one build can be
in the cleanup step at a time, and if there is such a build in the cleanup
step, then the compile steps in other builds will wait for it to finish.
Please see the "Interlocks" section of the user's manual for more details.

** Bugs Fixed

*** Buildslave missing_timeout= fired too quickly (#211)

By providing a missing_timeout= argument when creating the BuildSlave
instance, you can ask the buildmaster to send email if a buildslave is
disconnected for too long. A bug in the previous version caused this
notification to be sent too soon, rather than waiting until the timeout
period expired. This should be fixed now.

*** Test command display fixed (#332)

In the previous version, a steps.shell.Test step would display the parsed
test results (in the step's box on the waterfall display) in lieu of any
other descriptive text the step might provide. In this release, these two
pieces of information are combined.

** Minor Changes

The buildmaster's version is logged to its twistd.log file at startup. The
buildslave does the same, to its own logfile.

Remote commands now record how long each command took. The "elapsedTime="
message will appear in the step's main logfile.

The "buildbot restart" command no longer fails if the buildbot wasn't already

The FileUpload and FileDownload steps now create their target directories
(and any missing intermediate directories) before writing to the destination

The per-build and per-step web pages now show the start, finish, and elapsed
time of their build or step.

If a Subversion-based build is started with a mixture of Changes that specify
particular numeric revisions and "HEAD" Changes (which indicate that a trunk
checkout is desired), the build will use a trunk checkout. Previously this
would probably cause an error. It is not clear how this situation might

** Compability With Other Tools

The mercurial commit hook (buildbot.changes.hgbuildbot) in the previous
version doesn't work with hg-1.0 or later (it uses an API function that was
present in the hg-0.9.5 release, but was removed from hg-1.0). This
incompability has been fixed: the new version of buildbot should be
compatible with hg-1.0 and newer (and it probably retains compability with
hg-0.9.5 and earlier too). (#328)

The Git tool has traditionally provided two ways to run each command, either
as subcommands of /usr/bin/git (like "git checkout"), or as individual tools
(like /usr/bin/git-checkout). The latter form is being removed in the
upcoming 1.6 Git release. Previous versions of Buildbot have used the
git-checkout form, and will break when Git is upgraded to 1.6 or beyond. The
new Buildbot release switches to the subcommand form. Note that this is a
change on the buildslave side.

The Git checkout command will now use the default branch (as set in the
steps.source.Git() step definition) if the changes that it is building do not
specify some other branch to build. (#340)

** Deprecation Schedule

No features have been deprecated in this release, and no deprecated features
have been removed. As a reminder, the following deprecated features are
scheduled for removal in an upcoming release:

c['sources'] (plural) was replaced by c['change_source'] (singular) in 0.7.6,
and will be removed by 0.8.0.

c['bots'] was replaced by c['buildslaves'] in 0.7.6, and will be removed by
0.8.0 . c['bots'] only accepts BuildSlave instances, not name/passwd tuples.

The html.Waterfall status target was replaced by html.WebStatus in 0.7.6, and
will be removed by 0.8.0.

* Release 0.7.8 (24 Jul 2008)

** New features

The IRC bot will respond to three new commands: 'notify' subscribes the
channel (or the sender, if the command is sent as a private "/msg") to hear
about build events. 'join' tells the bot to join some new IRC channel.
'leave' tells it to leave a channel. See the "IRC Bot" section of the User's
Manual for details. (#171)

Build Steps now have "statistics", in addition to logfiles. These are used to
count things like how many tests passed or failed. There are methods to sum
these counters across all steps and display the results in the Build status.
The Waterfall display now shows the count of failed tests on the top-most box
in each column, using this mechanism.

The new buildbot.steps.shell.PerlModuleTest step was added, to run Perl unit
tests. This is a wrapper around the regular ShellCommand that parses the
output of the standard perl unit test system and counts how many tests
passed/failed/etc. The results are put into the step's summary text, and a
count of tests passed/failed/skipped are tracked in the steps's statistics.
The factory.CPAN build factory has been updated to use this, so configuring a
Buildbot to test a perl module available from CPAN should be as easy as:

 s = source.CVS(cvsroot, cvsmodule)
 f = factory.CPAN(s)

Build Properties have been generalized: they remain associated with a single
Build, but the properties can be set from a variety of sources. In previous
releases, the Build itself would set properties like 'buildername', 'branch',
and 'revision' (the latter two indicating which version of the source code it
was trying to get), and the source-checkout BuildSteps would set a property
named 'got_revision' (to indicate what version of the soruce code it actually
got). In this release, the 'scheduler' property is set to indicate which
Scheduler caused the build to be started. In addition, the config file can
specify properties to be set on all Builds, or on all Builds for a specific
Builder. All these properties are available for interpolation into
ShellCommands and environment variables by using the WithProperties() marker.

It may be easier to implement simple build parameterization (e.g. to upload
generated binaries to a specific directory, or to only perform long-running
tests on a nightly build instead of upon every checkin) by using these Build
Properties than to write custom BuildSteps.

** Other improvements

The /buildslaves web page shows which slaves are currently running builds.
Offline slaves are displayed in bold.

Buildbot's setup.py now provides metadata to setuptools (if installed): an
entry_points script was added, and a dependency upon twisted-2.4.x or newer
was declared. This makes it more likely that 'easy_install buildbot' will

The MailNotifier class acquired a mode="passing" flag: in this mode, the
buildbot will only send mail about passing builds (versus only on failing
builds, or only on builds which failed when the previous build had passed).

** Bugs fixed

Don't display force/stop build buttons when build control is disabled (#246)

When a build is waiting on a lock, don't claim that it has started (#107)

Make SVN mode=copy tolerate symlinks on freebsd, "cp -rp" -> "cp -RPp" (#86)

The svnpoller changesource now ignores branch deletion (#261)

The Git unit tests should run even if the user has not told Git about their

The WebStatus /xmlrpc server's getStatus() method was renamed to the
more-accurate getLastBuildResults().

The TinderboxMailNotifier status output acquired an useChangeTime= argument.

The bonsaipoller changesource got some fixes.

** Deprecation Schedule

No features have been deprecated in this release, and no deprecated features
have been removed. As a reminder, the following deprecated features are
scheduled for removal in an upcoming release:

c['sources'] (plural) was replaced by c['change_source'] (singular) in 0.7.6,
and will be removed by 0.8.0.

c['bots'] was replaced by c['buildslaves'] in 0.7.6, and will be removed by
0.8.0 . c['bots'] only accepts BuildSlave instances, not name/passwd tuples.

The html.Waterfall status target was replaced by html.WebStatus in 0.7.6, and
will be removed by 0.8.0.

* Release 0.7.7 (29 Mar 2008)

** Things You Need To Know

*** builder names must not start with an underscore (`_').

These are now reserved for internal buildbot purposes, such as the magic
"_all" pseudo-builder that the web pages use to allow force-build buttons
that start builds on all Builders at once.

** New Features

*** "buildbot checkconfig"

The "buildbot checkconfig" command will look at your master.cfg file and tell
you if there are any problems with it. This can be used to test potential
changes to your config file before submitting them to the running
buildmaster. This is particularly useful to run just before doing "buildbot
restart", since the restart will fail if the config file has an error. By
running "buildbot checkconfig master.cfg && buildbot restart", you'll only
perform the restart if the config file was ok. Many thanks to Ben Hearsum for
the patch.

*** Waterfall "?category=FOO" query-arguments

The Waterfall page now accepts one or more "category=" query arguments in the
URL, to filter the display by categories. These behave a lot like the
"builder=" query argument. Thanks to Jermo Davann for the patch.

** Bugs Fixed

Many bugs were fixed, and many minor features were added. Many thanks to
Dustin Mitchell who fixed and coordinated many of these. Here is a terse
list, for more details, please see the Trac page for the 0.7.7 release, at
http://buildbot.net/trac/query?status=closed&milestone=0.7.7 :

Many of the URLs generated by the buildbot were wrong.
Display of last-heard-from timestamps on the buildslaves web page were wrong.
Asking an IRC bot about a build waiting on a Lock should no longer crash.
Same for the web viewer.
Stop treating the encouraged info/ directory as leftover.
Add more force/stop build buttons.
Timestamps displayed on the waterfall now handle daylight savings properly.
p4poller no longer quits after a single failure.
Improved Git support, including 'try', branch, and revisions.
Buildslaves now use 'git', not 'cogito'.
Make older hg client/servers handle specific-revision builds properly.
Fix twisted.scripts._twistw problem on twisted-2.5.0 and windows.
Fix workdir= and env= on ShellCommands
Fix logfile-watching in 'buildbot start' on OS-X.
Fix ShellCommand crashes when the program emits >640kB of output per chunk.
New WarningCountingShellCommand step.
Fix TreeSize step.
Fix transfer.FileUpload/FileDownload crashes for large files.
Make 'buildbor reconfig' on windows tell you that it doesn't work.
Add a To: header to the mail sent by the slave-missing timeout.
Disable usePTY= for most unit tests, it makes some debian systems flunk tests.
Add 'absolute source stamps'
Add 'triggerable schedulers', and a buildstep to trigger them.
Remove buildbot.changes.freshcvsmail
Add new XMLRPC methods: getAllBuilders, getStatus, getLastBuilds.
Accept WithProperties in more places: env=, workdir=, others.
Use --no-auth-cache with SVN commands to avoid clobbering shared svn state.
Add hours/minutes/seconds in the waterfall's ETA display.
Trial: count Doctest lines too.
ShellCommand: record more info in the headers: stdin closing, PTY usage.
Make it possible to stop builds across reconfig boundaries.
SVN revision numbers are now passed as strings, which was breaking MailNotifier

** Deprecation Schedule

The changes.freshcvsmail change source was replaced by
changes.mail.FCMaildirSource in 0.7.6, and has been removed in 0.7.7 .

c['sources'] (plural) was replaced by c['change_source'] (singular) in 0.7.6,
and will be removed by 0.8.0.

c['bots'] was replaced by c['buildslaves'] in 0.7.6, and will be removed by
0.8.0 . c['bots'] only accepts BuildSlave instances, not name/passwd tuples.

The html.Waterfall status target was replaced by html.WebStatus in 0.7.6, and
will be removed by 0.8.0.

* Release 0.7.6 (30 Sep 2007)

** Things You Need To Know

*** 'buildbot upgrade-master'

Each time you install a new version of Buildbot, you should run the new
'buildbot upgrade-master' command on each of your pre-existing buildmasters.
This will add files and fix (or at least detect) incompatibilities between
your old config and the new code.

*** new WebStatus page

The Waterfall has been replaced by the more general WebStatus display,
described below. WebStatus serves static files from a new public_html/
directory that lives in the buildmaster's basedir. Files like index.html,
buildbot.css, and robots.txt are served directly from that directory, so any
modifications you wish to make should be made to those files. In particular,
any custom CSS you've written should be copied into public_html/buildbot.css.
The 'upgrade-master' command will populate this directory for you.

The old Waterfall page is deprecated, but it should continue to work for
another few releases. It is now a subclass of WebStatus which just replaces
the default root URL with another copy of the /waterfall resource.

*** Compatibility: Python-2.3 or newer, Twisted-2.0 or newer

No compatiblity losses here, buildbot-0.7.6 is compatible with the same
versions of python and twisted that 0.7.5 was.

Buildbot is tested on a regular basis (http://buildbot.buildbot.net) against
nearly a full matrix of Python-(2.3,2.4,2.5) * Twisted-(2.0,2.1,2.2,2.4,2.5).

*** New Buildbot Home Page

Buildbot has moved to a new Trac instance at http://buildbot.net/ , and all
new bugs and tickets should be filed there. The old sourceforge bugs at
http://buildbot.sf.net/ will slowly be migrated over. Mailing lists are still
managed at sourceforge, and downloads are still available there.

*** Changed/Deprecated master.cfg Keys and Classes

c['sources'] (plural) has been replaced by c['change_source'] (singular).

c['bots'] has been replaced by c['buildslaves'], and it expects a list of
BuildSlave instances instead of tuples. See below for more details.

The 'freshcvsmail' change source has been deprecated, and will be removed in
the next release.

The html.Waterfall status target has been deprecated, and replaced by
html.WebStatus .

** New Features

*** WebStatus

The new WebStatus display is a superset of the old Waterfall. It contains a
waterfall as a sub-page, but it also contains pages with more compact
representations of recent build status. The "one_line_per_build" page
contains just that, and "one_box_per_builder" shows just the information from
the top of the waterfall page (last-finished-build and current-activity).

The initial page (when you hit the root of the web site) is served from
index.html, and provides links to the Waterfall as well as the other pages.

Most of these pages can be filtered by adding query arguments to the URL.
Adding "?builder=XYZ" will cause the page to only show results for the given
builder. Adding "?builder=XYZ&builder=ABC" will show results for either
builder. "?branch=trunk" will limit the results to builds that involved code
from the trunk.

The /waterfall page has arguments to hide those annoying "buildslave
connected" messages, to start and and at arbitrary times, and to auto-refresh
at a chosen interval (with a hardcoded minimum of 15 seconds). It also has a
"help" page with forms that will help you add all of these nifty filtering

The recommended practice is to modify the index.html file to include links to
the filtered pages that you find most useful.

Note that WebStatus defaults to allowForce=False, meaning that the display
will not offer or accept "Force Build" or "Stop Build" controls. (The old
Waterfall defaults to allowForce=True).

The new WebStatus pages try very hard to use only relative links, making life
better when the Buildbot sits behind an HTTP reverse proxy.

In addition, there is a rudimentary XMLRPC server run by the WebStatus
object. It only has two methods so far, but it will acquire more in the
future. The first customer of this is a project to add a buildbot plugin to

*** BuildFactory.addStep(Step(args))

BuildFactories can be set up either with a complete list of steps, or by
calling the .addStep() method repeatedly. The preferred way to provide a step
is by instantiating it, rather than giving a class/kwargs pair. This gives
the BuildStep class a chance to examine the arguments (and complain about
anything it doesn't like) while the config file is being read and problems
are being logged. For example, the old-style:

 from buildbot.process.factory import BuildFactory, s
 steps = [s(CVS, cvsroot="blah", mode="copy"),
          s(Compile, command=["make", "all"]),
          s(Test, command=["make", "test"]),
 f = BuildFactory(steps)

is now:

 f = BuildFactory()
 f.addStep( CVS(cvsroot="blah", mode="copy") )
 f.addStep( Compile(command=["make", "all"]) )
 f.addStep( Test(command=["make", "test"]) )

Authors of BuildStep subclasses which override __init__ to add new arguments
must register them with self.addFactoryArguments(**newargs) to make sure that
those classes will work with this new style, otherwise the new arguments will
be lost.

Using class/kwargs pairs is deprecated, and will be removed in a future

*** BuildSlave instances, max_builds=, notify_on_missing=

Buildslave specification has changed a lot in this release. The old config:

 c['bots'] = [ ("bot1name", "bot1passwd"),
               ("bot2name", "bot2passwd") ]

is now:

 from buildbot.buildslave import BuildSlave
 c['slaves'] = [ BuildSlave("bot1name", "bot1passwd"),
                 BuildSlave("bot2name", "bot2passwd") ]

This new form gives us the ability to add new controls. The first is
"max_builds=", which imposes a concurrency limit that is like the usual
SlaveLock, but gives the buildmaster the opportunity to find a different
slave to run the build. (the buildslave is chosen before the SlaveLock is
claimed, so pure SlaveLocks don't let you take full advantage of build

The other addition is "notify_on_missing=", which accepts an email address
(or list of addresses), and sends a message when the buildslave has been
disconnected for more than an hour (configurable with missing_timeout=). This
may be useful when you expect that the buildslave hosts should be available
most of the time, and want to investigate the reasons that it went offline.

** Other Improvements

The IRC bot has been refactored to make it easier to add instant-messaging
status delivery in the future. The IM plugins are not yet written, though.

When multiple buildslaves are available for a given build, one of them will
be picked at random. In previous releases, the first one on the list was
always picked. This helps to add a certain measure of load-balancing. More
improvements will be made in the future.

When the buildslave does a VC checkout step that requires clobbering the
build directory (i.e. in all modes except for 'update'), the buildslave will
first set the permissions on all build files to allow their deletion, before
it attempts to delete them. This should fix some problems in which a build
process left non-user-writable files lying around (frequently a result of
enthusiastic unit tests).

The BuildStep's workdir= argument can now accept a WithProperties()
specification, allowing greater control over the workdir.

Support for the 'Bazaar' version control system (/usr/bin/bzr) has been
added, using the buildbot.steps.source.Bzr class. This is a replacement for
the old 'Arch' (/usr/bin/tla and /usr/bin/baz) systems, which are still
supported by Buildbot with the source.Arch and source.Bazaar classes,
respectively. Unfortunately the old baz system claimed the 'Bazaar' classname
early, so the new system must use source.Bzr instead of the desired
source.Bazaar . A future release might change this.

A rudimentary Gnome Panel applet is provided in contrib/bb_applet.py, which
provides 'buildbot statusgui' -like colored status boxes inside the panel.
Installing it is a bit tricky, though.

The 'buildbot try' command now accepts a '--diff=foo.patch' argument, to let
you provide a pre-computed patch. This makes it easier to test out patches
that you've looked over for safety, without first applying them to your local
source tree.

A new Mercurial change source was added, hg_buildbot.py, which runs as an
in-process post-commit hook. This gives us access to much more information
about the change, as well as being much faster.

The email-based changesource have been refactored, to make it easier to write
new mail parsers. A parser for the SVN "commit-email.pl" script has been

** Bugs Fixed

Far too many to count. Please see
http://buildbot.net/trac/query?status=closed&milestone=0.7.6 for a partial
list of tickets closed for this release, and the ChangeLog for a complete
list of all changes since 0.7.5 .

* Release 0.7.5 (10 Dec 2006)

** Things You Need To Know

*** The Great BuildStep Renaming

All BuildSteps have moved! They used to be classes in buildbot.process.step,
but now they all have separate modules in buildbot.steps.* . They have been
split out into separate categories: for example, the source checkout steps
are now buildbot.steps.source.CVS, buildbot.steps.source.Darcs, etc. The most
commonly used one is probably buildbot.steps.shell.ShellCommand . The
python-specific steps are in buildbot.steps.python, and the Twisted-specific
steps are in buildbot.steps.python_twisted .

You will need to update your master.cfg files to use the new names. The old
names are deprecated and will be removed altogether in the next release.

*** Compatibility

Buildbot now requires python-2.3 or later. Buildbot now requires
Twisted-2.0.0 or later. Support for earlier versions of both has finally been
removed. If you discover it works with unsupported versions, please return
your Buildbot to the factory for repairs :-).

Buildbot has *not* yet been tested against the recent python-2.5 release. It
has been tested against the latest SVN version of Twisted, but only in
conjunction with python-2.4 .

** new features

*** reconfiguring a Builder no longer causes a disconnect/reconnect cycle

This means that sending SIGHUP to the master or running 'buildbot reconfig
MASTERDIR' command no longer interrupts any current builds, nor does it lose
pending builds like it did before. This involved a fairly substantial
refactoring of the various internal BotPerspective/BotMaster/Builder classes.
Note that reconfiguring Schedulers still loses any Changes that were waiting
for the tree to become stable: hopefully this will be fixed in the next

*** 'buildbot start/restart/reconfig' now show logs until startup is complete

These commands now have additional code to follow twistd.log and display all
the lines that are emitted from the beginning of the start/reconfig action
until it has completed. This gives you a chance to see any problems detected
in the config file without needing to manually look in twistd.log or use
another shell to 'tail -f' it. This also makes it clear which config file is
being used. This functionality is not available under windows.

In addition, if any problems are detected during 'start' or 'restart' (but
not reconfig), the buildbot command will terminate with a non-zero exit
status, making it easier to use in scripts. Closes SF#1517975.

*** Locks now take maxCount=N to allow multiple simultaneous owners

This allows Locks to be non-exclusive but still limit maximum concurrency.
Thanks to James Knight for the patch. Closes SF#1434997.

*** filetransfer steps

buildbot.steps.transfer.FileUpload is a buildstep that will move files from
the slave to the master. Likewise, FileDownload will move files from the
master down to the buildslave. Many thanks to Albert Hofkamp for contributing
these classes. Closes SF#1504631.

*** pyflakes step

buildbot.steps.python.PyFlakes will run the simple 'pyflakes' static analysis
tool and parse the results to tell you about undefined names, unused imports,
etc. You'll need to tell it how to run pyflakes, usually with something like
command=["pyflakes", "src/packagedir"] or the like. The default command is
"make pyflakes", which assumes that you have a suitable target in your
top-level Makefile.

*** Monotone support

Nathaniel Smith has contributed initial support for the Monotone version
control system. The code still needs docs and tests, but on the other hand it
has been in use by the Monotone buildbot for a long time now, so it is
probably fairly stable.

*** Tinderbox support

Ben Hearsum and the Mozilla crew have contributed some classes to allow
Buildbot to work with Tinderbox clients. One piece is
buildbot.changes.bonsaipoller.BonsaiPoller, which is a ChangeSource that
polls a Bonsai server (which is a kind of web-vased viewcvs CGI script) to
discover source code changes. The other piece is
buildbot.status.tinderbox.TinderboxMailNotifier, which is a status plugin
that sends email in the same format as Tinderbox does, which allows a number
of Tinderbox tools to be driven by Buildbot instead.

*** SVN Poller

Niklaus Giger contributed a ChangeSource (buildbot.changes.svnpoller) which
polls a remote SVN repository on a periodic basis. This is useful when, for
whatever reason, you cannot add a post-commit hook script to the repository.
This obsoletes the external contrib/svn_watcher.py script.

** notes for plugin developers

*** IStatusLog.readlines()

This new method makes it easier for a status plugin (or a
BuildStep.createSummary method) to walk through a StatusLog one line at a
time. For example, if you wanted to create an extra logfile that just
contained all the GCC warnings from the main log, you could use the

    def createSummary(self, log):
        warnings = []
        for line in log.readlines():
            if "warning:" in line:
        self.addCompleteLog('warnings', "".join(warnings))

The "BuildStep LogFiles" section of the user's manual contains more
information. This method is not particularly memory-efficient yet (it reads
the whole logfile into memory first, then splits it into lines); this will be
improved in a future release.

** bug fixes

*** Update source.SVN to work with the new SVN-1.4.0

The latest subversion changed the behavior in an unusual situation which
caused the unit tests to fail. This was unlikely to cause a problem in actual
usage, but the tests have been updated to pass with the new version.

*** update svn_buildbot.py to avoid mangling filenames

Older versions of this script were stripping the wrong number of columns from
the output of 'svnlook changed', and would sometimes mangle filenames. This
has been fixed. Closes SF#1545146.

*** logfiles= caused subsequent build failures under Windows

Earlier versions of buildbot didn't explicitly close any logfiles= file
handles when the build finished. On windows (where you cannot delete a file
that someone else is reading), this could cause the next build to fail as the
source checkout step was unable to delete the old working directory. This has
been fixed. Closes SF#1568415.

*** logfiles= didn't work on OS-X

Macintosh OS-X has a different behavior when reading files that have reached
EOF, the result was that logfiles= sometimes didn't work. Thanks to Mark Rowe
for the patch.

** other changes

The 'buildbot sighup MASTERDIR' command has been replaced with 'buildbot
reconfig MASTERDIR', since that seems to be a slightly more meaningful name.
The 'sighup' form will remain as an alias.

* Release 0.7.4 (23 Aug 2006)

** Things You Need To Know

The PBChangeSource's prefix= argument has changed, you probably need to add a
slash now. This is mostly used by sites which use Subversion and

The subcommands that are used to create a buildmaster or a buildslave have
changed. They used to be called 'buildbot master' and 'buildbot slave'. Now
they are called 'buildbot create-master' and 'buildbot create-slave'. Zipf's
Law suggests that these are more appropriate names for these
infrequently-used commands.

The syntax for the c['manhole'] feature has changed.

** new features

*** full Perforce support

SF#1473939: large patch from Scott Lamb, with docs and unit tests! This
includes both the step.P4 source-checkout BuildStep, and the changes.p4poller
ChangeSource you'll want to feed it. P4 is now supported just as well as all
the other VC systems. Thanks Scott!

*** SSH-based Manhole

The 'manhole' feature allows buildbot developers to get access to a python
read/eval/print loop (REPL) inside the buildmaster through a network
connection. Previously, this ran over unencrypted telnet, using a simple
username/password for access control. The new release defaults to encrypted
SSH access, using either username/password or an authorized_keys file (just
like sshd). There also exists an unencrypted telnet form, but its use is
discouraged. The syntax for setting up a manhole has changed, so master.cfg
files that use them must be updated. The "Debug options" section in the
user's manual provides a complete description.

*** Multiple Logfiles

BuildSteps can watch multiple log files in realtime, not just stdout/stderr.
This works in a similar fashion to 'tail -f': the file is polled once per
second, and any new data is sent to the buildmaster.

This requires a buildslave running 0.7.4 or later, and a warning message is
produced if used against an old buildslave (which will otherwise produce no
data). Use "logfiles={'name': 'filename'}" to take advantage of this feature
from master.cfg, and see the "ShellCommand" section of the user's manual for
full documentation.

The 'Trial' buildstep has been updated to use this, to display
_trial_temp/test.log in realtime. It also knows to fall back to the previous
"cat" command if the buildslave is too old.

*** BuildStep URLs

BuildSteps can now add arbitrary URLs which will be displayed on the
Waterfall page in the same place that Logs are presented. This is intended to
provide a link to generated HTML pages, such as the output of a code coverage
tool. The step is responsible for somehow uploading the HTML to a web server:
this feature merely provides an easy way to present the HREF link to the
user. See the "BuildStep URLs" section of the user's manual for details and

*** LogObservers

BuildSteps can now attach LogObservers to various logfiles, allowing them to
get real-time log output. They can use this to watch for progress-indicating
events (like counting the number of files compiled, or the number of tests
which have run), and update both ETA/progress-tracking and step text. This
allows for more accurate ETA information, and more information passed to the
user about how much of the process has completed.

The 'Trial' buildstep has been updated to use this for progress tracking, by
counting how many test cases have run.

** new documentation

What classes are useful in your master.cfg file? A table of them has been
added to the user's manual, in a section called "Index of Useful Classes".

Want a list of all the keys in master.cfg? Look in the "Index of master.cfg
keys" section.

A number of pretty diagrams have been added to the "System Architecture"
portion of the manual, explaining how all the buildbot pieces fit together.

An HTML form of the user's manual is now shipped in the source tarball. This
makes it a bit bigger: sorry about that. The old PyCon-2003 paper has been
removed from the distribution, as it is mostly supplanted by the user's
manual by this point.

** bugfixes

SF#1217699 + SF#1381867: The prefix= argument to PBChangeSource has been
changed: now it does just a simple string-prefix match and strip. The
previous behavior was buggy and unhelpful. NOTE: if you were using prefix=
before, you probably need to add a slash to the end of it.

SF#1398174: ignore SVN property changes better, fixed by Olivier Bonnet

SF#1452801: don't double-escape the build URL, fixed by Olivier Bonnet

SF#1401121: add support for running py2exe on windows, by Mark Hammond

reloading unchanged config files with WithProperties shouldn't change anything.

All svn commands now include --non-interactive so they won't ask for
passwords. Instead, the command will fail if it cannot be performed without
user input.

Deprecation warnings with newer versions of Twisted have been hushed.

** compatibility

I haven't actually removed support for Twisted-1.3.0 yet, but I'd like to.

The step_twisted default value for --reporter matches modern Twisteds,
though, and won't work under 1.3.0.

ShellCommand.flunkOnFailure now defaults to True, so any shell command which
fails counts as a build failure. Set this to False if you don't want this

** minor features

contrib/darcs_buildbot.py contains a new script suitable for use in a darcs

Hovering a cursor over the yellow "Build #123" box in the Waterfall display
will pop up an HTML tooltip to show the reason for the build. Thanks to Zandr
Milewski for the suggestion.

contrib/CSS/*.css now contains several contributed stylesheets to make the
Waterfall display a bit less ugly. Thanks to John O'Duinn for gathering them.

ShellCommand and its derivatives can now accept either a string or a list of
strings in the description= and descriptionDone= arguments. Thanks to Paul
Winkler for the catch.

* Release 0.7.3 (23 May 2006)

** compatibility

This release is compatible with Twisted-1.3.0, but the next one will not be.
Please upgrade to at least Twisted-2.0.x soon, as the next buildbot release
will require it.

** new features

*** Mercurial support

Support for Mercurial version control system (http://selenic.com/mercurial)
has been added. This adds a buildbot.process.step.Mercurial BuildStep. A
suitable hook script to deliver changes to the buildmaster is still missing.

*** 'buildbot restart' command

The 'buildbot restart BASEDIR' command will perform a 'buildbot stop' and
'buildbot start', and will attempt to wait for the buildbot process to shut
down in between. This is useful when you need to upgrade the code on your
buildmaster or buildslave and want to take it down for a minimum amount of

*** build properties

Each build now has a set of named "Build Properties", which can be set by
steps and interpolated into ShellCommands. The 'revision' and 'got_revision'
properties are the most interesting ones available at this point, and can be
used e.g. to get the VC revision number into the filename of a generated
tarball. See the user's manual section entited "Build Properties" for more

** minor features

*** IRC now takes password= argument

Useful for letting your bot claim a persistent identity.

*** svn_buildbot.py is easier to modify to understand branches
*** BuildFactory has a new .addStep method
*** p4poller has new arguments
*** new contrib scripts: viewcvspoll, svnpoller, svn_watcher

These poll an external VC repository to watch for changes, as opposed to
adding a hook script to the repository that pushes changes into the
buildmaster. This means higher latency but may be easier to configure,
especially if you do not have authority on the repository host.

*** VC build property 'got_revision'

The 'got_revision' property reports what revision a VC step actually
acquired, which may be useful to know when building from HEAD.

*** improved CSS in Waterfall

The Waterfall display has a few new class= tags, which may make it easier to
write custom CSS to make it look prettier.

*** robots_txt= argument in Waterfall

You can now pass a filename to the robots_txt= argument, which will be served
as the "robots.txt" file. This can be used to discourage search engine
spiders from crawling through the numerous build-status pages.

** bugfixes

*** tests more likely to pass on non-English systems

The unit test suite now sets $LANG='C' to make subcommands emit error
messages in english instead of whatever native language is in use on the
host. This improves the chances that the unit tests will pass on such
systems. This affects certain VC-related subcommands too.

test_vc was assuming that the system time was expressed with a numeric
timezone, which is not always the case, especially under windows. This
probably works better now than it did before. This only affects the CVS

'buildbot try' (for CVS) now uses UTC instead of the local timezone. The
'got_revision' property is also expressed in UTC. Both should help deal with
buggy versions of CVS that don't parse numeric timezones properly.

* Release 0.7.2 (17 Feb 2006)

** new features

*** all TCP port numbers in config file now accept a strports string

Sometimes it is useful to restrict certain TCP ports that the buildmaster
listens on to use specific network interfaces. In particular, if the
buildmaster and SVN repository live on the same machine, you may want to
restrict the PBChangeSource to only listen on the loopback interface,
insuring that no external entities can inject Changes into the buildbot.
Likewise, if you are using something like Apache's reverse-proxy feature to
provide access to the buildmaster's HTML status page, you might want to hide
the real Waterfall port by having it only bind to the loopback interface.

To accomplish this, use a string like "tcp:12345:interface=" instead
of a number like 12345. These strings are called "strports specification
strings", and are documented in twisted's twisted.application.strports module
(you can probably type 'pydoc twisted.application.strports' to see this
documentation). Pretty much everywhere the buildbot takes a port number will
now accept a strports spec, and any bare numbers are translated into TCP port
numbers (listening on all network interfaces) for compatibility.

*** buildslave --umask control

Twisted's daemonization utility (/usr/bin/twistd) automatically sets the
umask to 077, which means that all files generated by both the buildmaster
and the buildslave will only be readable by the account under which the
respective daemon is running. This makes it unnecessarily difficult to share
build products (e.g. by symlinking ~/public_html/current_docs/ to a directory
within the slave's build directory where each build puts the results of a
"make docs" step).

The 'buildbot slave <PARAMS>' command now accepts a --umask argument, which
can be used to override the umask set by twistd. If you create the buildslave
with '--umask=022', then all build products will be world-readable, making it
easier for other processes (run under other accounts) to access them.

** bug fixes

The 0.7.1 release had a bug whereby reloading the config file could break all
configured Schedulers, causing them to raise an exception when new changes
arrived but not actually schedule a new build. This has been fixed.

Fixed a bug which caused the AnyBranchScheduler to explode when branch==None.
Thanks to Kevin Turner for the catch. I also think I fixed a bug whereby the
TryScheduler would explode when it was given a Change (which it is supposed
to simply ignore).

The Waterfall display now does more quoting of names (including Builder
names, BuildStep names, etc), so it is more likely that these names can
contain unusual characters like spaces, quotes, and slashes. There may still
be some problems with these kinds of names, however.. please report any bugs
to the mailing list.

* Release 0.7.1 (26 Nov 2005)

** new features

*** scheduler.Nightly

Dobes Vandermeer contributed a cron-style 'Nightly' scheduler. Unlike the
more-primitive Periodic class (which only lets you specify the duration
between build attempts), Nightly lets you schedule builds for specific times
of day, week, month, or year. The interface is very much like the crontab(5)
file. See the buildbot.scheduler.Nightly docstring for complete details.

** minor new features

*** step.Trial can work with Trial from Twisted >2.1.0

The 'Trial' step now accepts the trialMode= argument, which should be a list
of strings to be added to trial's argv array. This defaults to ["-to"], which
is appropriate for the Trial that ships in Twisted-2.1.0 and earlier, and
tells Trial to emit non-colorized verbose output. To use this step with
trials from later versions of Twisted, this should be changed to

In addition, you can now set other Trial command-line parameters through the
trialArgs= argument. This is a list of strings, and defaults to an empty list.

*** Added a 'resubmit this build' button to the web page

*** Make the VC-checkout step's description more useful

Added the word "[branch]" to the VC step's description (used in the Step's
box on the Waterfall page, among others) when we're checking out a
non-default branch. Also add "rNNN" where appropriate to indicate which
revision is being checked out. Thanks to Brad Hards and Nathaniel Smith for
the suggestion.

** bugs fixed

Several patches from Dobes Vandermeer: Escape the URLs in email, in case they
have spaces and such. Fill otherwise-empty <td> elements, as a workaround for
buggy browsers that might optimize them away. Also use binary mode when
opening status pickle files, to make windows work better. The
AnyBranchScheduler now works even when you don't provide a fileIsImportant=

Stringify the base revision before stuffing it into a 'try' jobfile, helping
SVN and Arch implement 'try' builds better. Thanks to Steven Walter for the

Fix the compare_attrs list in PBChangeSource, FreshCVSSource, and Waterfall.
Before this, certain changes to these objects in the master.cfg file were
ignored, such that you would have to stop and re-start the buildmaster to
make them take effect.

The config file is now loaded serially, shutting down old (or replaced)
Status/ChangeSource plugins before starting new ones. This fixes a bug in
which changing an aspect of, say, the Waterfall display would cause an
exception as both old and new instances fight over the same TCP port. This
should also fix a bug whereby new Periodic Schedulers could fire a build
before the Builders have finished being added.

There was a bug in the way Locks were handled when the config file was
reloaded: changing one Builder (but not the others) and reloading master.cfg
would result in multiple instances of the same Lock object, so the Locks
would fail to prevent simultaneous execution of Builds or Steps. This has
been fixed.

** other changes

For a long time, certain StatusReceiver methods (like buildStarted and
stepStarted) have been able to return another StatusReceiver instance
(usually 'self') to indicate that they wish to subscribe to events within the
new object. For example, if the buildStarted() method returns 'self', the
status receiver will also receive events for the new build, like
stepStarted() and buildETAUpdate(). Returning a 'self' from buildStarted() is
equivalent to calling build.subscribe(self).

Starting with buildbot-0.7.1, this auto-subscribe convenience will also
register to automatically unsubscribe the target when the build or step has
finished, just as if build.unsubscribe(self) had been called. Also, the
unsubscribe() method has been changed to not explode if the same receiver is
unsubscribed multiple times. (note that it will still explode is the same
receiver is *subscribed* multiple times, so please continue to refrain from
doing that).

* Release 0.7.0 (24 Oct 2005)

** new features

*** new c['schedulers'] config-file element (REQUIRED)

The code which decides exactly *when* a build is performed has been massively
refactored, enabling much more flexible build scheduling. YOU MUST UPDATE
your master.cfg files to match: in general this will merely require you to
add an appropriate c['schedulers'] entry. Any old ".treeStableTime" settings
on the BuildFactory instances will now be ignored. The user's manual has
complete details with examples of how the new Scheduler classes work.

*** c['interlocks'] removed, Locks and Dependencies now separate items

The c['interlocks'] config element has been removed, and its functionality
replaced with two separate objects. Locks are used to tell the buildmaster
that certain Steps or Builds should not run at the same time as other Steps
or Builds (useful for test suites that require exclusive access to some
external resource: of course the real fix is to fix the tests, because
otherwise your developers will be suffering from the same limitations). The
Lock object is created in the config file and then referenced by a Step
specification tuple or by the 'locks' key of the Builder specification
dictionary. Locks come in two flavors: MasterLocks are buildmaster-wide,
while SlaveLocks are specific to a single buildslave.

When you want to have one Build run or not run depending upon whether some
other set of Builds have passed or failed, you use a special kind of
Scheduler defined in the scheduler.Dependent class. This scheduler watches an
upstream Scheduler for builds of a given source version to complete, and only
fires off its own Builders when all of the upstream's Builders have built
that version successfully.

Both features are fully documented in the user's manual.

*** 'buildbot try'

The 'try' feature has finally been added. There is some configuration
involved, both in the buildmaster config and on the developer's side, but
once in place this allows the developer to type 'buildbot try' in their
locally-modified tree and to be given a report of what would happen if their
changes were to be committed. This works by computing a (base revision,
patch) tuple that describes the developer's tree, sending that to the
buildmaster, then running a build with that source on a given set of
Builders. The 'buildbot try' tool then emits status messages until the builds
have finished.

'try' exists to allow developers to run cross-platform tests on their code
before committing it, reducing the chances they will inconvenience other
developers by breaking the build. The UI is still clunky, but expect it to
change and improve over the next few releases.

Instructions for developers who want to use 'try' (and the configuration
changes necessary to enable its use) are in the user's manual.

*** Build-On-Branch

When suitably configured, the buildbot can be used to build trees from a
variety of related branches. You can set up Schedulers to build a tree using
whichever branch was last changed, or users can request builds of specific
branches through IRC, the web page, or (eventually) the CLI 'buildbot force'

The IRC 'force' command now takes --branch and --revision arguments (not that
they always make sense). Likewise the HTML 'force build' button now has an
input field for branch and revision. Your build's source-checkout step must
be suitably configured to support this: for SVN it involves giving both a
base URL and a default branch. Other VC systems are configured differently.
The ChangeSource must also provide branch information: the 'buildbot
sendchange' command now takes a --branch argument to help hook script writers
accomplish this.

*** Multiple slaves per Builder

You can now attach multiple buildslaves to each Builder. This can provide
redundancy or primitive load-balancing among many machines equally capable of
running the build. To use this, define a key in the Builder specification
dictionary named 'slavenames' with a list of buildslave names (instead of the
usual 'slavename' that contains just a single slavename).

*** minor new features

The IRC and email status-reporting facilities now provide more specific URLs
for particular builds, in addition to the generic buildmaster home page. The
HTML per-build page now has more information.

The Twisted-specific test classes have been modified to match the argument
syntax preferred by Trial as of Twisted-2.1.0 and newer. The generic trial
steps are still suitable for the Trial that comes with older versions of
Twisted, but may produce deprecation warnings or errors when used with the
latest Trial.

** bugs fixed

DNotify, used by the maildir-watching ChangeSources, had problems on some
64-bit systems relating to signed-vs-unsigned constants and the DN_MULTISHOT
flag. A workaround was provided by Brad Hards.

The web status page should now be valid XHTML, thanks to a patch by Brad
Hards. The charset parameter is specified to be UTF-8, so VC comments,
builder names, etc, should probably all be in UTF-8 to be displayed properly.

** creeping version dependencies

The IRC 'force build' command now requires python2.3 (for the shlex.split

* Release 0.6.6 (23 May 2005)

** bugs fixed

The 'sendchange', 'stop', and 'sighup' subcommands were broken, simple bugs
that were not caught by the test suite. Sorry.

The 'buildbot master' command now uses "raw" strings to create .tac files
that will still function under windows (since we must put directory names
that contain backslashes into that file).

The keep-on-disk behavior added in 0.6.5 included the ability to upgrade old
in-pickle LogFile instances. This upgrade function was not added to the
HTMLLogFile class, so an exception would be raised when attempting to load or
display any build with one of these logs (which are normally used only for
showing build exceptions). This has been fixed.

Several unnecessary imports were removed, so the Buildbot should function
normally with just Twisted-2.0.0's "Core" module installed. (of course you
will need TwistedWeb, TwistedWords, and/or TwistedMail if you use status
targets that require them). The test suite should skip all tests that cannot
be run because of missing Twisted modules.

The master/slave's basedir is now prepended to sys.path before starting the
daemon. This used to happen implicitly (as a result of twistd's setup
preamble), but 0.6.5 internalized the invocation of twistd and did not copy
this behavior. This change restores the ability to access "private.py"-style
modules in the basedir from the master.cfg file with a simple "import
private" statement. Thanks to Thomas Vander Stichele for the catch.

* Release 0.6.5 (18 May 2005)

** deprecated config keys removed

The 'webPortnum', 'webPathname', 'irc', and 'manholePort' config-file keys,
which were deprecated in the previous release, have now been removed. In
addition, Builders must now always be configured with dictionaries: the
support for configuring them with tuples has been removed.

** master/slave creation and startup changed

The buildbot no longer uses .tap files to store serialized representations of
the buildmaster/buildslave applications. Instead, this release now uses .tac
files, which are human-readable scripts that create new instances (rather
than .tap files, which were pickles of pre-created instances). 'mktap
buildbot' is gone.

You will need to update your buildbot directories to handle this. The
procedure is the same as creating a new buildmaster or buildslave: use
'buildbot master BASEDIR' or 'buildbot slave BASEDIR ARGS..'. This will
create a 'buildbot.tac' file in the target directory. The 'buildbot start
BASEDIR' will use twistd to start the application.

The 'buildbot start' command now looks for a Makefile.buildbot, and if it
finds one (and /usr/bin/make exists), it will use it to start the application
instead of calling twistd directly. This allows you to customize startup,
perhaps by adding environment variables. The setup commands create a sample
file in Makefile.sample, but you must copy this to Makefile.buildbot to
actually use it. The previous release looked for a bare 'Makefile', and also
installed a 'Makefile', so you were always using the customized approach,
even if you didn't ask for it. That old Makefile launched the .tap file, so
changing names was also necessary to make sure that the new 'buildbot start'
doesn't try to run the old .tap file.

'buildbot stop' now uses os.kill instead of spawning an external process,
making it more likely to work under windows. It waits up to 5 seconds for the
daemon to go away, so you can now do 'buildbot stop BASEDIR; buildbot start
BASEDIR' with less risk of launching the new daemon before the old one has
fully shut down. Likewise, 'buildbot start' imports twistd's internals
directly instead of spawning an external copy, so it should work better under

** new documentation

All of the old Lore-based documents were converted into a new Texinfo-format
manual, and considerable new text was added to describe the installation
process. The docs are not yet complete, but they're slowly shaping up to form
a proper user's manual.

** new features

Arch checkouts can now use precise revision stamps instead of always using
the latest revision. A separate Source step for using Bazaar (an alternative
Arch client) instead of 'tla' was added. A Source step for Cogito (the new
linux kernel VC system) was contributed by Brandon Philips. All Source steps
now accept a retry= argument to indicate that failing VC checkouts should be
retried a few times (SF#1200395), note that this requires an updated

The 'buildbot sendchange' command was added, to be used in VC hook scripts to
send changes at a pb.PBChangeSource . contrib/arch_buildbot.py was added to
use this tool; it should be installed using the 'Arch meta hook' scheme.

Changes can now accept a branch= parameter, and Builders have an
isBranchImportant() test that acts like isFileImportant(). Thanks to Thomas
Vander Stichele. Note: I renamed his tag= to branch=, in anticipation of an
upcoming feature to build specific branches. "tag" seemed too CVS-centric.

LogFiles have been rewritten to stream the incoming data directly to disk
rather than keeping a copy in memory all the time (SF#1200392). This
drastically reduces the buildmaster's memory requirements and makes 100MB+
log files feasible. The log files are stored next to the serialized Builds,
in files like BASEDIR/builder-dir/12-log-compile-output, so you'll want a
cron job to delete old ones just like you do with old Builds. Old-style
Builds from 0.6.4 and earlier are converted when they are first read, so the
first load of the Waterfall display after updating to this release may take
quite some time.

** build process updates

BuildSteps can now return a status of EXCEPTION, which terminates the build
right away. This allows exceptions to be caught right away, but still make
sure the build stops quickly.

** bug fixes

Some more windows incompatibilities were fixed. The test suite now has two
failing tests remaining, both of which appear to be Twisted issues that
should not affect normal operation.

The test suite no longer raises any deprecation warnings when run against
twisted-2.0 (except for the ones which come from Twisted itself).

* Release 0.6.4 (28 Apr 2005)

** major bugs fixed

The 'buildbot' tool in 0.6.3, when used to create a new buildmaster, failed
unless it found a 'changes.pck' file. As this file is created by a running
buildmaster, this made 0.6.3 completely unusable for first-time
installations. This has been fixed.

** minor bugs fixed

The IRC bot had a bug wherein asking it to watch a certain builder (the "I'll
give a shout when the build finishes" message) would cause an exception, so
it would not, in fact, shout. The HTML page had an exception in the "change
sources" page (reached by following the "Changes" link at the top of the
column that shows the names of commiters). Re-loading the config file while
builders were already attached would result in a benign error message. The
server side of the PBListener status client had an exception when providing
information about a non-existent Build (e.g., when the client asks for the
Build that is currently running, and the server says "None").

These bugs have all been fixed.

The unit tests now pass under python2.2; they were failing before because of
some 2.3isms that crept in. More unit tests which failed under windows now
pass, only one (test_webPathname_port) is still failing.

** 'buildbot' tool looks for a .buildbot/options file

The 'statusgui' and the 'debugclient' subcommands can both look for a
.buildbot/ directory, and an 'options' file therein, to extract default
values for the location of the buildmaster. This directory is searched in the
current directory, its parent, etc, all the way up to the filesystem root
(assuming you own the directories in question). It also look in ~/.buildbot/
for this file. This feature allows you to put a .buildbot at the top of your
working tree, telling any 'buildbot' invocations you perform therein how to
get to the buildmaster associated with that tree's project.

Windows users get something similar, using %APPDATA%/buildbot instead of
~/.buildbot .

** windows ShellCommands are launched with 'cmd.exe'

The buildslave has been modified to run all list-based ShellCommands by
prepending [os.environ['COMSPEC'], '/c'] to the argv list before execution.
This should allow the buildslave's PATH to be searched for commands,
improving the chances that it can run the same 'trial -o foo' commands as a
unix buildslave. The potential downside is that spaces in argv elements might
be re-parsed, or quotes might be re-interpreted. The consensus on the mailing
list was that this is a useful thing to do, but please report any problems
you encounter with it.

** minor features

The Waterfall display now shows the buildbot's home timezone at the top of
the timestamp column. The default favicon.ico is now much nicer-looking (it
is generated with Blender.. the icon.blend file is available in CVS in
docs/images/ should you care to play with it).

* Release 0.6.3 (25 Apr 2005)

** 'buildbot' tool gets more uses

The 'buildbot' executable has acquired three new subcommands. 'buildbot
debugclient' brings up the small remote-control panel that connects to a
buildmaster (via the slave port and the c['debugPassword']). This tool,
formerly in contrib/debugclient.py, lets you reload the config file, force
builds, and simulate inbound commit messages. It requires gtk2, glade, and
the python bindings for both to be installed.

'buildbot statusgui' brings up a live status client, formerly available by
running buildbot/clients/gtkPanes.py as a program. This connects to the PB
status port that you create with:


and shows two boxes per Builder, one for the last build, one for current
activity. These boxes are updated in realtime. The effect is primitive, but
is intended as an example of what's possible with the PB status interface.

'buildbot statuslog' provides a text-based running log of buildmaster events.

Note: command names are subject to change. These should get much more useful
over time.

** web page has a favicon

When constructing the html.Waterfall instance, you can provide the filename
of an image that will be provided when the "favicon.ico" resource is
requested. Many web browsers display this as an icon next to the URL or
bookmark. A goofy little default icon is included.

** web page has CSS

Thanks to Thomas Vander Stichele, the Waterfall page is now themable through
CSS. The default CSS is located in buildbot/status/classic.css, and creates a
page that is mostly identical to the old, non-CSS based table.

You can specify a different CSS file to use by passing it as the css=
argument to html.Waterfall(). See the docstring for Waterfall for some more

** builder "categories"

Thomas has added code which places each Builder in an optional "category".
The various status targets (Waterfall, IRC, MailNotifier) can accept a list
of categories, and they will ignore any activity in builders outside this
list. This makes it easy to create some Builders which are "experimental" or
otherwise not yet ready for the world to see, or indicate that certain
builders should not harass developers when their tests fail, perhaps because
the build slaves for them are not yet fully functional.

** Deprecated features

*** defining Builders with tuples is deprecated

For a long time, the preferred way to define builders in the config file has
been with a dictionary. The less-flexible old style of a 4-item tuple (name,
slavename, builddir, factory) is now officially deprecated (i.e., it will
emit a warning if you use it), and will be removed in the next release.
Dictionaries are more flexible: additional keys like periodicBuildTime are
simply unavailable to tuple-defined builders.

Note: it is a good idea to watch the logfile (usually in twistd.log) when you
first start the buildmaster, or whenever you reload the config file. Any
warnings or errors in the config file will be found there.

*** c['webPortnum'], c['webPathname'], c['irc'] are deprecated

All status reporters should be defined in the c['status'] array, using
buildbot.status.html.Waterfall or buildbot.status.words.IRC . These have been
deprecated for a while, but this is fair warning that these keys will be
removed in the next release.

*** c['manholePort'] is deprecated

Again, this has been deprecated for a while, in favor of:

 c['manhole'] = master.Manhole(port, username, password)

The preferred syntax will eventually let us use other, better kinds of debug
shells, such as the experimental curses-based ones in the Twisted sandbox
(which would offer command-line editing and history).

** bug fixes

The waterfall page has been improved a bit. A circular-reference bug in the
web page's TextLog class was fixed, which caused a major memory leak in a
long-running buildmaster with large logfiles that are viewed frequently.
Modifying the config file in a way which only changed a builder's base
directory now works correctly. The 'buildbot' command tries to create
slightly more useful master/slave directories, adding a Makefile entry to
re-create the .tap file, and removing global-read permissions from the files
that may contain buildslave passwords.

** twisted-2.0.0 compatibility

Both buildmaster and buildslave should run properly under Twisted-2.0 . There
are still some warnings about deprecated functions, some of which could be
fixed, but there are others that would require removing compatibility with
Twisted-1.3, and I don't expect to do that until 2.0 has been out and stable
for at least several months. The unit tests should pass under 2.0, whereas
the previous buildbot release had tests which could hang when run against the
new "trial" framework in 2.0.

The Twisted-specific steps (including Trial) have been updated to match 2.0

** win32 compatibility

Thankt to Nick Trout, more compatibility fixes have been incorporated,
improving the chances that the unit tests will pass on windows systems. There
are still some problems, and a step-by-step "running buildslaves on windows"
document would be greatly appreciated.

** API docs

Thanks to Thomas Vander Stichele, most of the docstrings have been converted
to epydoc format. There is a utility in docs/gen-reference to turn these into
a tree of cross-referenced HTML pages. Eventually these docs will be
auto-generated and somehow published on the buildbot web page.

* Release 0.6.2 (13 Dec 2004)

** new features

It is now possible to interrupt a running build. Both the web page and the
IRC bot feature 'stop build' commands, which can be used to interrupt the
current BuildStep and accelerate the termination of the overall Build. The
status reporting for these still leaves something to be desired (an
'interrupt' event is pushed into the column, and the reason for the interrupt
is added to a pseudo-logfile for the step that was stopped, but if you only
look at the top-level status it appears that the build failed on its own).

Builds are also halted if the connection to the buildslave is lost. On the
slave side, any active commands are halted if the connection to the
buildmaster is lost.

** minor new features

The IRC log bot now reports ETA times in a MMSS format like "2m45s" instead
of the clunky "165 seconds".

** bug fixes

*** Slave Disconnect

Slave disconnects should be handled better now: the current build should be
abandoned properly. Earlier versions could get into weird states where the
build failed to finish, clogging the builder forever (or at least until the
buildmaster was restarted).

In addition, there are weird network conditions which could cause a
buildslave to attempt to connect twice to the same buildmaster. This can
happen when the slave is sending large logfiles over a slow link, while using
short keepalive timeouts. The buildmaster has been fixed to allow the second
connection attempt to take precedence over the first, so that the older
connection is jettisoned to make way for the newer one.

In addition, the buildslave has been fixed to be less twitchy about timeouts.
There are now two parameters: keepaliveInterval (which is controlled by the
mktap 'keepalive' argument), and keepaliveTimeout (which requires editing the
.py source to change from the default of 30 seconds). The slave expects to
see *something* from the master at least once every keepaliveInterval
seconds, and will try to provoke a response (by sending a keepalive request)
'keepaliveTimeout' seconds before the end of this interval just in case there
was no regular traffic. Any kind of traffic will qualify, including
acknowledgements of normal build-status updates.

The net result is that, as long as any given PB message can be sent over the
wire in less than 'keepaliveTimeout' seconds, the slave should not mistakenly
disconnect because of a timeout. There will be traffic on the wire at least
every 'keepaliveInterval' seconds, which is what you want to pay attention to
if you're trying to keep an intervening NAT box from dropping what it thinks
is an abandoned connection. A quiet loss of connection will be detected
within 'keepaliveInterval' seconds.

*** Large Logfiles

The web page rendering code has been fixed to deliver large logfiles in
pieces, using a producer/consumer apparatus. This avoids the large spike in
memory consumption when the log file body was linearized into a single string
and then buffered in the socket's application-side transmit buffer. This
should also avoid the 640k single-string limit for web.distrib servers that
could be hit by large (>640k) logfiles.

* Release 0.6.1 (23 Nov 2004)

** win32 improvements/bugfixes

Several changes have gone in to improve portability to non-unix systems. It
should be possible to run a build slave under windows without major issues
(although step-by-step documentation is still greatly desired: check the
mailing list for suggestions from current win32 users).

*** PBChangeSource: use configurable directory separator, not os.sep

The PBChangeSource, which listens on a TCP socket for change notices
delivered from tools like contrib/svn_buildbot.py, was splitting source
filenames with os.sep . This is inappropriate, because those file names are
coming from the VC repository, not the local filesystem, and the repository
host may be running a different OS (with a different separator convention)
than the buildmaster host. In particular, a win32 buildmaster using a CVS
repository running on a unix box would be confused.

PBChangeSource now takes a sep= argument to indicate the separator character
to use.

*** build saving should work better

windows cannot do the atomic os.rename() trick that unix can, so under win32
the buildmaster falls back to save/delete-old/rename, which carries a slight
risk of losing a saved build log (if the system were to crash between the
delete-old and the rename).

** new features

*** test-result tracking

Work has begun on fine-grained test-result handling. The eventual goal is to
be able to track individual tests over time, and create problem reports when
a test starts failing (which then are resolved when the test starts passing
again). The first step towards this is an ITestResult interface, and code in
the TrialTestParser to create such results for all non-passing tests (the
ones for which Trial emits exception tracebacks).

These test results are currently displayed in a tree-like display in a page
accessible from each Build's page (follow the numbered link in the yellow
box at the start of each build to get there).

This interface is still in flux, as it really wants to be able to accomodate
things like compiler warnings and tests that are skipped because of missing
libraries or unsupported architectures.

** bug fixes

*** VC updates should survive temporary failures

Some VC systems (CVS and SVN in particular) get upset when files are turned
into directories or vice versa, or when repository items are moved without
the knowledge of the VC system. The usual symptom is that a 'cvs update'
fails where a fresh checkout succeeds.

To avoid having to manually intervene, the build slaves' VC commands have
been refactored to respond to update failures by deleting the tree and
attempting a full checkout. This may cause some unnecessary effort when,
e.g., the CVS server falls off the net, but in the normal case it will only
come into play when one of these can't-cope situations arises.

*** forget about an existing build when the slave detaches

If the slave was lost during a build, the master did not clear the
.currentBuild reference, making that builder unavailable for later builds.
This has been fixed, so that losing a slave should be handled better. This
area still needs some work, I think it's still possible to get both the
slave and the master wedged by breaking the connection at just the right
time. Eventually I want to be able to resume interrupted builds (especially
when the interruption is the result of a network failure and not because the
slave or the master actually died).

*** large logfiles now consume less memory

Build logs are stored as lists of (type,text) chunks, so that
stdout/stderr/headers can be displayed differently (if they were
distinguishable when they were generated: stdout and stderr are merged when
usePTY=1). For multi-megabyte logfiles, a large list with many short strings
could incur a large overhead. The new behavior is to merge same-type string
chunks together as they are received, aiming for a chunk size of about 10kb,
which should bring the overhead down to a more reasonable level.

There remains an issue with actually delivering large logfiles over, say,
the HTML interface. The string chunks must be merged together into a single
string before delivery, which causes a spike in the memory usage when the
logfile is viewed. This can also break twisted.web.distrib -type servers,
where the underlying PB protocol imposes a 640k limit on the size of
strings. This will be fixed (with a proper Producer/Consumer scheme) in the
next release.

* Release 0.6.0 (30 Sep 2004)

** new features

*** /usr/bin/buildbot control tool

There is now an executable named 'buildbot'. For now, this just provides a
convenient front-end to mktap/twistd/kill, but eventually it will provide
access to other client functionality (like the 'try' builds, and a status
client). Assuming you put your buildbots in /var/lib/buildbot/master/FOO,
you can do 'buildbot create-master /var/lib/buildbot/master/FOO' and it will
create the .tap file and set up a sample master.cfg for you. Later,
'buildbot start /var/lib/buildbot/master/FOO' will start the daemon.

*** build status now saved in external files, -shutdown.tap unnecessary

The status rewrite included a change to save all build status in a set of
external files. These files, one per build, are put in a subdirectory of the
master's basedir (named according to the 'builddir' parameter of the Builder
configuration dictionary). This helps keep the buildmaster's memory
consumption small: the (potentially large) build logs are kept on disk
instead of in RAM. There is a small cache (2 builds per builder) kept in
memory, but everything else lives on disk.

The big change is that the buildmaster now keeps *all* status in these
files. It is no longer necessary to preserve the buildbot-shutdown.tap file
to run a persistent buildmaster. The buildmaster may be launched with
'twistd -f buildbot.tap' each time, in fact the '-n' option can be added to
prevent twistd from automatically creating the -shutdown.tap file.

There is still one lingering bug with this change: the Expectations object
for each builder (which records how long the various steps took, to provide
an ETA value for the next time) is not yet saved. The result is that the
first build after a restart will not provide an ETA value.

0.6.0 keeps status in a single file per build, as opposed to 0.5.0 which
kept status in many subdirectories (one layer for builds, another for steps,
and a third for logs). 0.6.0 will detect and delete these subdirectories as
it overwrites them.

The saved builds are optional. To prevent disk usage from growing without
bounds, you may want to set up a cron job to run 'find' and delete any which
are too old. The status displays will happily survive without those saved
build objects.

The set of recorded Changes is kept in a similar file named 'changes.pck'.

*** source checkout now uses timestamp/revision

Source checkouts are now performed with an appropriate -D TIMESTAMP (for
CVS) or -r REVISION (for SVN) marker to obtain the exact sources that were
specified by the most recent Change going into the current Build. This
avoids a race condition in which a change might be committed after the build
has started but before the source checkout has completed, resulting in a
mismatched set of source files. Such changes are now ignored.

This works by keeping track of repository-wide revision/transaction numbers
(for version control systems that offer them, like SVN). The checkout or
update is performed with the highest such revision number. For CVS (which
does not have them), the timestamp of each commit message is used, and a -D
argument is created to place the checkout squarely in the middle of the "tree
stable timer"'s window.

This also provides the infrastructure for the upcoming 'try' feature. All
source-checkout commands can now obtain a base revision marker and a patch
from the Build, allowing certain builds to be performed on something other
than the most recent sources.

See source.xhtml and steps.xhtml for details.

*** Darcs and Arch support added

There are now build steps which retrieve a source tree from Darcs and Arch
repositories. See steps.xhtml for details.

Preliminary P4 support has been added, thanks to code from Dave Peticolas.
You must manually set up each build slave with an appropriate P4CLIENT: all
buildbot does is run 'p4 sync' at the appropriate times.

*** Status reporting rewritten

Status reporting was completely revamped. The config file now accepts a
BuildmasterConfig['status'] entry, with a list of objects that perform status
delivery. The old config file entries which controlled the web status port
and the IRC bot have been deprecated in favor of adding instances to
['status']. The following status-delivery classes have been implemented, all
in the 'buildbot.status' package:

 client.PBListener(port, username, passwd)
 html.Waterfall(http_port, distrib_port)
 mail.MailNotifier(fromaddr, mode, extraRecipients..)
 words.IRC(host, nick, channels)

See the individual docstrings for details about how to use each one. You can
create new status-delivery objects by following the interfaces found in the
buildbot.interfaces module.

*** BuildFactory configuration process changed

The basic BuildFactory class is now defined in buildbot.process.factory
rather than buildbot.process.base, so you will have to update your config
files. factory.BuildFactory is the base class, which accepts a list of Steps
to run. See docs/factories.xhtml for details.

There are now easier-to-use BuildFactory classes for projects which use GNU
Autoconf, perl's MakeMaker (CPAN), python's distutils (but no unit tests),
and Twisted's Trial. Each one takes a separate 'source' Step to obtain the
source tree, and then fills in the rest of the Steps for you.

*** CVS/SVN VC steps unified, simplified

The confusing collection of arguments for the CVS step ('clobber=',
'copydir=', and 'export=') have been removed in favor of a single 'mode'
argument. This argument describes how you want to use the sources: whether
you want to update and compile everything in the same tree (mode='update'),
or do a fresh checkout and full build each time (mode='clobber'), or
something in between.

The SVN (Subversion) step has been unified and accepts the same mode=
parameter as CVS. New version control steps will obey the same interface.

Most of the old configuration arguments have been removed. You will need to
update your configuration files to use the new arguments. See
docs/steps.xhtml for a description of all the new parameters.

*** Preliminary Debian packaging added

Thanks to the contributions of Kirill Lapshin, we can now produce .deb
installer packages. These are still experimental, but they include init.d
startup/shutdown scripts, which the the new /usr/bin/buildbot to invoke
twistd. Create your buildmasters in /var/lib/buildbot/master/FOO, and your
slaves in /var/lib/buildbot/slave/BAR, then put FOO and BAR in the
appropriate places in /etc/default/buildbot . After that, the buildmasters
and slaves will be started at every boot.

Pre-built .debs are not yet distributed. Use 'debuild -uc -us' from the
source directory to create them.

** minor features

*** Source Stamps

Each build now has a "source stamp" which describes what sources it used. The
idea is that the sources for this particular build can be completely
regenerated from the stamp. The stamp is a tuple of (revision, patch), where
the revision depends on the VC system being used (for CVS it is either a
revision tag like "BUILDBOT-0_5_0" or a datestamp like "2004/07/23", for
Subversion it is a revision number like 11455). This must be combined with
information from the Builder that is constant across all builds (something to
point at the repository, and possibly a branch indicator for CVS and other VC
systems that don't fold this into the repository string).

The patch is an optional unified diff file, ready to be applied by running
'patch -p0 <PATCH' from inside the workdir. This provides support for the
'try' feature that will eventually allow developers to run buildbot tests on
their code before checking it in.

*** SIGHUP causes the buildmaster's configuration file to be re-read

*** IRC bot now has 'watch' command

You can now tell the buildbot's IRC bot to 'watch <buildername>' on a builder
which is currently performing a build. When that build is finished, the
buildbot will make an announcement (including the results of the build).

The IRC 'force build' command will also announce when the resulting build has

*** the 'force build' option on HTML and IRC status targets can be disabled

The html.Waterfall display and the words.IRC bot may be constructed with an
allowForce=False argument, which removes the ability to force a build through
these interfaces. Future versions will be able to restrict this build-forcing
capability to authenticated users. The per-builder HTML page no longer
displays the 'Force Build' buttons if it does not have this ability. Thanks
to Fred Drake for code and design suggestions.

*** master now takes 'projectName' and 'projectURL' settings

These strings allow the buildbot to describe what project it is working for.
At the moment they are only displayed on the Waterfall page, but in the next
release they will be retrieveable from the IRC bot as well.

*** survive recent (SVN) Twisted versions

The buildbot should run correctly (albeit with plenty of noisy deprecation
warnings) under the upcoming Twisted-2.0 release.

*** work-in-progress realtime Trial results acquisition

Jonathan Simms (<slyphon>) has been working on 'retrial', a rewrite of
Twisted's unit test framework that will most likely be available in
Twisted-2.0 . Although it is not yet complete, the buildbot will be able to
use retrial in such a way that build status is reported on a per-test basis,
in real time. This will be the beginning of fine-grained test tracking and
Problem management, described in docs/users.xhtml .

* Release 0.5.0 (22 Jul 2004)

** new features

*** web.distrib servers via TCP

The 'webPathname' config option, which specifies a UNIX socket on which to
publish the waterfall HTML page (for use by 'mktap web -u' or equivalent),
now accepts a numeric port number. This publishes the same thing via TCP,
allowing the parent web server to live on a separate machine.

This config option could be named better, but it will go away altogether in
a few releases, when status delivery is unified. It will be replaced with a
WebStatusTarget object, and the config file will simply contain a list of
various kinds of status targets.

*** 'master.cfg' filename is configurable

The buildmaster can use a config file named something other than
"master.cfg". Use the --config=foo.cfg option to mktap to control this.

*** FreshCVSSource now uses newcred (CVSToys >= 1.0.10)

The FreshCVSSource class now defaults to speaking to freshcvs daemons from
modern CVSToys releases. If you need to use the buildbot with a daemon from
CVSToys-1.0.9 or earlier, use FreshCVSSourceOldcred instead. Note that the
new form only requires host/port/username/passwd: the "serviceName"
parameter is no longer meaningful.

*** Builders are now configured with a dictionary, not a tuple

The preferred way to set up a Builder in master.cfg is to provide a
dictionary with various keys, rather than a (non-extensible) 4-tuple. See
docs/config.xhtml for details. The old tuple-way is still supported for now,
it will probably be deprecated in the next release and removed altogether in
the following one.

*** .periodicBuildTime is now exposed to the config file

To set a builder to run at periodic intervals, simply add a
'periodicBuildTime' key to its master.cfg dictionary. Again, see
docs/config.xhtml for details.

*** svn_buildbot.py adds --include, --exclude

The commit trigger script now gives you more control over which files are
sent to the buildmaster and which are not.

*** usePTY is controllable at slave mktap time

The buildslaves usually run their child processes in a pty, which creates a
process group for all the children, which makes it much easier to kill them
all at once (i.e. if a test hangs). However this causes problems on some
systems. Rather than hacking slavecommand.py to disable the use of these
ptys, you can now create the slave's .tap file with --usepty=0 at mktap

** Twisted changes

A summary of warnings (e.g. DeprecationWarnings) is provided as part of the
test-case summarizer. The summarizer also counts Skips, expectedFailures,
and unexpectedSuccesses, displaying the counts on the test step's event box.

The RunUnitTests step now uses "trial -R twisted" instead of "trial
twisted.test", which is a bit cleaner. All .pyc files are deleted before
starting trial, to avoid getting tripped up by deleted .py files.

** documentation

docs/config.xhtml now describes the syntax and allowed contents of the
'master.cfg' configuration file.

** bugfixes

Interlocks had a race condition that could cause the lock to get stuck

FreshCVSSource has a prefix= argument that was moderately broken (it used to
only work if the prefix was a single directory component). It now works with

The buildmaster used to complain when it saw the "info" directory in a
slave's workspace. This directory is used to publish information about the
slave host and its administrator, and is not a leftover build directory as
the complaint suggested. This complain has been silenced.

* Release 0.4.3 (30 Apr 2004)

** PBChangeSource made explicit

In 0.4.2 and before, an internal interface was available which allowed
special clients to inject changes into the Buildmaster. This interface is
used by the contrib/svn_buildbot.py script. The interface has been extracted
into a proper PBChangeSource object, which should be created in the
master.cfg file just like the other kinds of ChangeSources. See
docs/sources.xhtml for details.

If you were implicitly using this change source (for example, if you use
Subversion and the svn_buildbot.py script), you *must* add this source to
your master.cfg file, or changes will not be delivered and no builds will be

The PBChangeSource accepts the same "prefix" argument as all other
ChangeSources. For a SVN repository that follows the recommended practice of
using "trunk/" for the trunk revisions, you probably want to construct the
source like this:

 source = PBChangeSource(prefix="trunk")

to make sure that the Builders are given sensible (trunk-relative)
filenames for each changed source file.

** Twisted changes

*** step_twisted.RunUnitTests can change "bin/trial"

The twisted RunUnitTests step was enhanced to let you run something other
than "bin/trial", making it easier to use a buildbot on projects which use
Twisted but aren't actually Twisted itself.

*** Twisted now uses Subversion

Now that Twisted has moved from CVS to SVN, the Twisted build processes have
been modified to perform source checkouts from the Subversion repository.

** minor feature additions

*** display Changes with HTML

Changes are displayed with a bit more pizazz, and a links= argument was
added to allow things like ViewCVS links to be added to the display
(although it is not yet clear how this argument should be used: the
interface remains subject to change untill it has been documented).

*** display ShellCommand logs with HTML

Headers are in blue, stderr is in red (unless usePTY=1 in which case stderr
and stdout are indistinguishable). A link is provided which returns the same
contents as plain text (by appending "?text=1" to the URL).

*** buildslaves send real tracebacks upon error

The .unsafeTracebacks option has been turned on for the buildslaves,
allowing them to send a full stack trace when an exception occurs, which is
logged in the buildmaster's twistd.log file. This makes it much easier to
determine what went wrong on the slave side.

*** BasicBuildFactory refactored

The BasicBuildFactory class was refactored to make it easier to create
derivative classes, in particular the BasicSVN variant.

*** "ping buildslave" web button added

There is now a button on the "builder information" page that lets a web user
initiate a ping of the corresponding build slave (right next to the button
that lets them force a build). This was added to help track down a problem
with the slave keepalives.

** bugs fixed:

You can now have multiple BuildSteps with the same name (the names are used
as hash keys in the data structure that helps determine ETA values for each
step, the new code creates unique key names if necessary to avoid
collisions). This means that, for example, you do not have to create a
BuildStep subclass just to have two Compile steps in the same process.

If CVSToys is not installed, the tests that depend upon it are skipped.

Some tests in 0.4.2 failed because of a missing set of test files, they are
now included in the tarball properly.

Slave keepalives should work better now in the face of silent connection
loss (such as when an intervening NAT box times out the association), the
connection should be reestablished in minutes instead of hours.

Shell commands on the slave are invoked with an argument list instead of the
ugly and error-prone split-on-spaces approach. If the ShellCommand is given
a string (instead of a list), it will fall back to splitting on spaces.
Shell commands should work on win32 now (using COMSPEC instead of /bin/sh).

Buildslaves under w32 should theoretically work now, and one was running for
the Twisted buildbot for a while until the machine had to be returned.

The "header" lines in ShellCommand logs (which include the first line, that
displays the command being run, and the last, which shows its exit status)
are now generated by the buildslave side instead of the local (buildmaster)
side. This can provide better error handling and is generally cleaner.
However, if you have an old buildslave (running 0.4.2 or earlier) and a new
buildmaster, then neither end will generate these header lines.

CVSCommand was improved, in certain situations 0.4.2 would perform
unnecessary checkouts (when an update would have sufficed). Thanks to Johan
Dahlin for the patches. The status output was fixed as well, so that
failures in CVS and SVN commands (such as not being able to find the 'svn'
executable) make the step status box red.

Subversion support was refactored to make it behave more like CVS. This is a
work in progress and will be improved in the next release.

* Release 0.4.2 (08 Jan 2004)

** test suite updated

The test suite has been completely moved over to Twisted's "Trial"
framework, and all tests now pass. To run the test suite (consisting of 64
tests, probably covering about 30% of BuildBot's logic), do this:

 PYTHONPATH=. trial -v buildbot.test

** Mail parsers updated

Several bugs in the mail-parsing code were fixed, allowing a buildmaster to
be triggered by mail sent out by a CVS repository. (The Twisted Buildbot is
now using this to trigger builds, as their CVS server machine is having some
difficulties with FreshCVS). The FreshCVS mail format for directory
additions appears to have changed recently: the new parser should handle
both old and new-style messages.

A parser for Bonsai commit messages (buildbot.changes.mail.parseBonsaiMail)
was contributed by Stephen Davis. Thanks Stephen!

** CVS "global options" now available

The CVS build step can now accept a list of "global options" to give to the
cvs command. These go before the "update"/"checkout" word, and are described
fully by "cvs --help-options". Two useful ones might be "-r", which causes
checked-out files to be read-only, and "-R", which assumes the repository is
read-only (perhaps by not attempting to write to lock files).

* Release 0.4.1 (09 Dec 2003)

** MaildirSources fixed

Several bugs in MaildirSource made them unusable. These have been fixed (for
real this time). The Twisted buildbot is using an FCMaildirSource while they
fix some FreshCVS daemon problems, which provided the encouragement for
getting these bugs fixed.

In addition, the use of DNotify (only available under linux) was somehow
broken, possibly by changes in some recent version of Python. It appears to
be working again now (against both python-2.3.3c1 and python-2.2.1).

** master.cfg can use 'basedir' variable

As documented in the sample configuration file (but not actually implemented
until now), a variable named 'basedir' is inserted into the namespace used
by master.cfg . This can be used with something like:

  os.path.join(basedir, "maildir")

to obtain a master-basedir-relative location.

* Release 0.4.0 (05 Dec 2003)

** newapp

I've moved the codebase to Twisted's new 'application' framework, which
drastically cleans up service startup/shutdown just like newcred did for
authorization. This is mostly an internal change, but the interface to
IChangeSources was modified, so in the off chance that someone has written a
custom change source, it may have to be updated to the new scheme.

The most user-visible consequence of this change is that now both
buildmasters and buildslaves are generated with the standard Twisted 'mktap'
utility. Basic documentation is in the README file.

Both buildmaster and buildslave .tap files need to be re-generated to run
under the new code. I have not figured out the styles.Versioned upgrade path
well enough to avoid this yet. Sorry.

This also means that both buildslaves and the buildmaster require
Twisted-1.1.0 or later.

** reloadable master.cfg

Most aspects of a buildmaster is now controlled by a configuration file
which can be re-read at runtime without losing build history. This feature
makes the buildmaster *much* easier to maintain.

In the previous release, you would create the buildmaster by writing a
program to define the Builders and ChangeSources and such, then run it to
create the .tap file. In the new release, you use 'mktap' to create the .tap
file, and the only parameter you give it is the base directory to use. Each
time the buildmaster starts, it will look for a file named 'master.cfg' in
that directory and parse it as a python script. That script must define a
dictionary named 'BuildmasterConfig' with various keys to define the
builders, the known slaves, what port to use for the web server, what IRC
channels to connect to, etc.

This config file can be re-read at runtime, and the buildmaster will compute
the differences and add/remove services as necessary. The re-reading is
currently triggered through the debug port (contrib/debugclient.py is the
debug port client), but future releases will add the ability to trigger the
reconfiguration by IRC command, web page button, and probably a local UNIX
socket (with a helper script to trigger a rebuild locally).

docs/examples/twisted_master.cfg contains a sample configuration file, which
also lists all the keys that can be set.

There may be some bugs lurking, such as re-configuring the buildmaster while
a build is running. It needs more testing.

** MaxQ support

Radix contributed some support scripts to run MaxQ test scripts. MaxQ
(http://maxq.tigris.org/) is a web testing tool that allows you to record
HTTP sessions and play them back.

** Builders can now wait on multiple Interlocks

The "Interlock" code has been enhanced to allow multiple builders to wait on
each one. This was done to support the new config-file syntax for specifying
Interlocks (in which each interlock is a tuple of A and [B], where A is the
builder the Interlock depends upon, and [B] is a list of builders that
depend upon the Interlock).

"Interlock" is misnamed. In the next release it will be changed to
"Dependency", because that's what it really expresses. A new class (probably
called Interlock) will be created to express the notion that two builders
should not run at the same time, useful when multiple builders are run on
the same machine and thrashing results when several CPU- or disk- intensive
compiles are done simultaneously.

** FreshCVSSource can now handle newcred-enabled FreshCVS daemons

There are now two FreshCVSSource classes: FreshCVSSourceNewcred talks to
newcred daemons, and FreshCVSSourceOldcred talks to oldcred ones. Mind you,
FreshCVS doesn't yet do newcred, but when it does, we'll be ready.

'FreshCVSSource' maps to the oldcred form for now. That will probably change
when the current release of CVSToys supports newcred by default.

** usePTY=1 on posix buildslaves

When a buildslave is running under POSIX (i.e. pretty much everything except
windows), child processes are created with a pty instead of separate
stdin/stdout/stderr pipes. This makes it more likely that a hanging build
(when killed off by the timeout code) will have all its sub-childred cleaned
up. Non-pty children would tend to leave subprocesses running because the
buildslave was only able to kill off the top-level process (typically

Windows doesn't have any concept of ptys, so non-posix systems do not try to
enable them.

** mail parsers should actually work now

The email parsing functions (FCMaildirSource and SyncmailMaildirSource) were
broken because of my confused understanding of how python class methods
work. These sources should be functional now.

** more irc bot sillyness

The IRC bot can now perform half of the famous AYBABTO scene.

* Release 0.3.5 (19 Sep 2003)

** newcred

Buildbot has moved to "newcred", a new authorization framework provided by
Twisted, which is a good bit cleaner and easier to work with than the
"oldcred" scheme in older versions. This causes both buildmaster and
buildslaves to depend upon Twisted 1.0.7 or later. The interface to
'makeApp' has changed somewhat (the multiple kinds of remote connections all
use the same TCP port now).

Old buildslaves will get "_PortalWrapper instance has no attribute
'remote_username'" errors when they try to connect. They must be upgraded.

The FreshCVSSource uses PB to connect to the CVSToys server. This has been
upgraded to use newcred too. If you get errors (TODO: what do they look
like?) in the log when the buildmaster tries to connect, you need to upgrade
your FreshCVS service or use the 'useOldcred' argument when creating your
FreshCVSSource. This is a temporary hack to allow the buildmaster to talk to
oldcred CVSToys servers. Using it will trigger deprecation warnings. It will
go away eventually.

In conjunction with this change, makeApp() now accepts a password which can
be applied to the debug service.

** new features

*** "copydir" for CVS checkouts

The CVS build step can now accept a "copydir" parameter, which should be a
directory name like "source" or "orig". If provided, the CVS checkout is
done once into this directory, then copied into the actual working directory
for compilation etc. Later updates are done in place in the copydir, then
the workdir is replaced with a copy.

This reduces CVS bandwidth (update instead of full checkout) at the expense
of twice the disk space (two copies of the tree).

*** Subversion (SVN) support

Radix (Christopher Armstrong) contributed early support for building
Subversion-based trees. The new 'SVN' buildstep behaves roughly like the
'CVS' buildstep, and the contrib/svn_buildbot.py script can be used as a
checkin trigger to feed changes to a running buildmaster.

** notable bugfixes

*** .tap file generation

We no longer set the .tap filename, because the buildmaster/buildslave
service might be added to an existing .tap file and we shouldn't presume to
own the whole thing. You may want to manually rename the "buildbot.tap" file
to something more meaningful (like "buildslave-bot1.tap").

*** IRC reconnect

If the IRC server goes away (it was restarted, or the network connection was
lost), the buildmaster will now schedule a reconnect attempt.

*** w32 buildslave fixes

An "rm -rf" was turned into shutil.rmtree on non-posix systems.

* Release 0.3.4 (28 Jul 2003)

** IRC client

The buildmaster can now join a set of IRC channels and respond to simple
queries about builder status.

** slave information

The build slaves can now report information from a set of info/* files in
the slave base directory to the buildmaster. This will be used by the slave
administrator to announce details about the system hosting the slave,
contact information, etc. For now, info/admin should contain the name/email
of the person who is responsible for the buildslave, and info/host should
describe the system hosting the build slave (OS version, CPU speed, memory,
etc). The contents of these files are made available through the waterfall

** change notification email parsers

A parser for Syncmail (syncmail.sourceforge.net) was added. SourceForge
provides examples of setting up syncmail to deliver CVS commit messages to
mailing lists, so hopefully this will make it easier for sourceforge-hosted
projects to set up a buildbot.

email processors were moved into buildbot.changes.mail . FCMaildirSource was
moved, and the compatibility location (buildbot.changes.freshcvsmail) will
go away in the next release.

** w32 buildslave ought to work

Some non-portable code was changed to make it more likely that the
buildslave will run under windows. The Twisted buildbot now has a
(more-or-less) working w32 buildslave.

* Release 0.3.3 (21 May 2003):

** packaging changes

*** include doc/examples in the release. Oops again.

** network changes

*** add keepalives to deal with NAT boxes

Some NAT boxes drop port mappings if the TCP connection looks idle for too
long (maybe 30 minutes?). Add application-level keepalives (dummy commands
sent from slave to master every 10 minutes) to appease the NAT box and keep
our connection alive. Enable this with --keepalive in the slave mktap
command line. Check the README for more details.

** UI changes

*** allow slaves to trigger any build that they host

Added an internal function to ask the buildmaster to start one of their
builds. Must be triggered with a debugger or manhole on the slave side for
now, will add a better UI later.

*** allow web page viewers to trigger any build

Added a button to the per-build page (linked by the build names on the third
row of the waterfall page) to allow viewers to manually trigger builds.
There is a field for them to indicate who they are and why they are
triggering the build. It is possible to abuse this, but for now the benefits
outweigh the damage that could be done (worst case, someone can make your
machine run builds continuously).

** generic buildprocess changes

*** don't queue multiple builds for offline slaves

If a slave is not online when a build is ready to run, that build is queued
so the slave will run it when it next connects. However, the buildmaster
used to queue every such build, so the poor slave machine would be subject
to tens or hundreds of builds in a row when they finally did come online.
The buildmaster has been changed to merge these multiple builds into a
single one.

*** bump ShellCommand default timeout to 20 minutes

Used for testing out the win32 twisted builder. I will probably revert this
in the next relese.

*** split args in ShellCommand ourselves instead of using /bin/sh

This should remove the need for /bin/sh on the slave side, improving the
chances that the buildslave can run on win32.

*** add configureEnv argument to Configure step, pass env dict to slave

Allows build processes to do things like 'CFLAGS=-O0 ./configure' without
using /bin/sh to set the environment variable

** Twisted buildprocess changes

*** warn instead of flunk the build when cReactor or qtreactor tests fail

These two always fail. For now, downgrade those failures to a warning
(orange box instead of red).

*** don't use 'clobber' on remote builds

Builds that run on remote machines (freebsd, OS-X) now use 'cvs update'
instead of clobbering their trees and doing a fresh checkout. The multiple
simultaneous CVS checkouts were causing a strain on Glyph's upstream

*** use trial --testmodule instead of our own test-case-name grepper

The Twisted coding/testing convention has developers put 'test-case-name'
tags (emacs local variables, actually) in source files to indicate which
test cases should be run to exercise that code. Twisted's unit-test
framework just acquired an argument to look for these tags itself. Use that
instead of the extra FindUnitTestsForFiles build step we were doing before.
Removes a good bit of code from buildbot and into Twisted where it really

* Release 0.3.2 (07 May 2003):

** packaging changes

*** fix major packaging bug: none of the buildbot/* subdirectories were
included in the 0.3.1 release. Sorry, I'm still figuring out distutils

** internal changes

*** use pb.Cacheable to update Events in remote status client. much cleaner.

*** start to clean up BuildProcess->status.builder interface

** bug fixes

*** waterfall display was missing a <tr>, causing it to be misrendered in most
browsers (except the one I was testing it with, of course)

*** URL without trailing slash (when served in a twisted-web distributed
server, with a url like "http://twistedmatrix.com/~warner.twistd") should do
redirect to URL-with-trailing-slash, otherwise internal hrefs are broken.

*** remote status clients: forget RemoteReferences at shutdown, removes
warnings about "persisting Ephemerals"

** Twisted buildprocess updates:

*** match build process as of twisted-1.0.5
**** use python2.2 everywhere now that twisted rejects python2.1
**** look for test-result constants in multiple places
*** move experimental 'trial --jelly' code to separate module
*** add FreeBSD builder
*** catch rc!=0 in HLint step
*** remove RunUnitTestsRandomly, use randomly=1 parameter instead
*** parameterize ['twisted.test'] default test case to make subclassing easier
*** ignore internal distutils warnings in python2.3 builder

* Release 0.3.1 (29 Apr 2003):

** First release.

** Features implemented:

 change notification from FreshCVS server or parsed maildir contents

 timed builds

 basic builds, configure/compile/test

 some Twisted-specific build steps: docs, unit tests, debuild

 status reporting via web page

** Features still experimental/unpolished

 status reporting via PB client