Ticket numbers in this file can be looked up by visiting
http://twistedmatrix.com/trac/ticket/<number>

Core 8.2.0 (2008-12-16)
=======================

Features
--------
 - Reactors are slowly but surely becoming more isolated, thus improving
   testability (#3198)
 - FilePath has gained a realpath method, and FilePath.walk no longer infinitely
   recurses in the case of a symlink causing a self-recursing filesystem tree
   (#3098)
 - FilePath's moveTo and copyTo methods now have an option to disable following
   of symlinks (#3105)
 - Private APIs are now included in the API documentation (#3268)
 - hotshot is now the default profiler for the twistd --profile parameter and
   using cProfile is now documented (#3355, #3356)
 - Process protocols can now implement a processExited method, which is
   distinct from processEnded in that it is called immediately when the child
   has died, instead of waiting for all the file descriptors to be closed
   (#1291)
 - twistd now has a --umask option (#966, #3024)
 - A new deferToThreadPool function exists in twisted.internet.threads (#2845)
 - There is now an example of writing an FTP server in examples/ftpserver.py
   (#1579)
 - A new runAsEffectiveUser function has been added to twisted.python.util
   (#2607)
 - twisted.internet.utils.getProcessOutput now offers a mechanism for
   waiting for the process to actually end, in the event of data received on
   stderr (#3239)
 - A fullyQualifiedName function has been added to twisted.python.reflect
   (#3254)
 - strports now defaults to managing access to a UNIX socket with a lock;
   lockfile=0 can be included in the strports specifier to disable this
   behavior (#2295)
 - FTPClient now has a 'rename' method (#3335)
 - FTPClient now has a 'makeDirectory' method (#3500)
 - FTPClient now has a 'removeFile' method (#3491)
 - flushWarnings, A new Trial method for testing warnings, has been added
   (#3487, #3427, #3506)
 - The log observer can now be configured in .tac files (#3534)

Fixes
-----
 - TLS Session Tickets are now disabled by default, allowing connections to
   certain servers which hang when an empty session ticket is received (like 
   GTalk) (#3463)
 - twisted.enterprise.adbapi.ConnectionPool's noisy attribute now defaults to
   False, as documented (#1806)
 - Error handling and logging in adbapi is now much improved (#3244)
 - TCP listeners can now be restarted (#2913)
 - Doctests can now be rerun with trial's --until-failure option (#2713)
 - Some memory leaks have been fixed in trial's --until-failure
   implementation (#3119, #3269)
 - Trial's summary reporter now prints correct runtime information and handles
   the case of 0 tests (#3184)
 - Trial and any other user of the 'namedAny' function now has better error
   reporting in the case of invalid module names (#3259)
 - Multiple instances of trial can now run in parallel in the same directory
   by creating _trial_temp directories with an incremental suffix (#2338)
 - Trial's failUnlessWarns method now works on Python 2.6 (#3223)
 - twisted.python.log now hooks into the warnings system in a way compatible
   with Python 2.6 (#3211)
 - The GTK2 reactor is now better supported on Windows, but still not passing
   the entire test suite (#3203)
 - low-level failure handling in spawnProcess has been improved and no longer
   leaks file descriptors (#2305, #1410)
 - Perspective Broker avatars now have their logout functions called in more
   cases (#392)
 - Log observers which raise exceptions are no longer removed (#1069)
 - transport.getPeer now always includes an IP address in the Address returned
   instead of a hostname (#3059)
 - Functions in twisted.internet.utils which spawn processes now avoid calling
   chdir in the case where no working directory is passed, to avoid some
   obscure permission errors (#3159)
 - twisted.spread.publish.Publishable no longer corrupts line endings on
   Windows (#2327)
 - SelectReactor now properly detects when a TLS/TCP connection has been
   disconnected (#3218)
 - twisted.python.lockfile no longer raises an EEXIST OSError and is much
   better supported on Windows (#3367)
 - When ITLSTransport.startTLS is called while there is data in the write
   buffer, TLS negotiation will now be delayed instead of the method raising
   an exception (#686)
 - The userAnonymous argument to FTPFactory is now honored (#3390)
 - twisted.python.modules no longer tries to "fix" sys.modules after an import
   error, which was just causing problems (#3388)
 - setup.py no longer attempts to build extension modules when run with Jython
   (#3410)
 - AMP boxes can now be sent in IBoxReceiver.startReceivingBoxes (#3477)
 - AMP connections are closed as soon as a key length larger than 255 is
   received (#3478)
 - Log events with timezone offsets between -1 and -59 minutes are now
   correctly reported as negative (#3515)

Deprecations and Removals
-------------------------
 - Trial's setUpClass and tearDownClass methods are now deprecated (#2903)
 - problemsFromTransport has been removed in favor of the argument passed to
   connectionLost (#2874)
 - The mode parameter to methods of IReactorUNIX and IReactorUNIXDatagram are
   deprecated in favor of applications taking other security precautions, since
   the mode of a Unix socket is often not respected (#1068)
 - Index access on instances of twisted.internet.defer.FirstError has been
   removed in favor of the subFailure attribute (#3298)
 - The 'changeDirectory' method of FTPClient has been deprecated in favor of
   the 'cwd' method (#3491)

Other
-----

 - #3202, #2869, #3225, #2955, #3237, #3196, #2355, #2881, #3054, #2374, #2918,
   #3210, #3052, #3267, #3288, #2985, #3295, #3297, #2512, #3302, #1222, #2631,
   #3306, #3116, #3215, #1489, #3319, #3320, #3321, #1255, #2169, #3182, #3323,
   #3301, #3318, #3029, #3338, #3346, #1144, #3173, #3165, #685, #3357, #2582,
   #3370, #2438, #1253, #637, #1971, #2208, #979, #1790, #1888, #1882, #1793,
   #754, #1890, #1931, #1246, #1025, #3177, #2496, #2567, #3400, #2213, #2027,
   #3415, #1262, #3422, #2500, #3414, #3045, #3111, #2974, #2947, #3222, #2878,
   #3402, #2909, #3423, #1328, #1852, #3382, #3393, #2029, #3489, #1853, #2026,
   #2375, #3502, #3482, #3504, #3505, #3507, #2605, #3519, #3520, #3121, #3484,
   #3439, #3216, #3511, #3524, #3521, #3197, #2486, #2449, #2748, #3381, #3236,
   #671


8.1.0 (2008-05-18)
==================

Features
--------

 - twisted.internet.error.ConnectionClosed is a new exception which is the
   superclass of ConnectionLost and ConnectionDone (#3137)
 - Trial's CPU and memory performance should be better now (#3034)
 - twisted.python.filepath.FilePath now has a chmod method (#3124)

Fixes
-----

 - Some reactor re-entrancy regressions were fixed (#3146, #3168)
 - A regression was fixed whereby constructing a Failure for an exception and
   traceback raised out of a Pyrex extension would fail (#3132)
 - CopyableFailures in PB can again be created from CopiedFailures (#3174)
 - FilePath.remove, when called on a FilePath representing a symlink to a
   directory, no longer removes the contents of the targeted directory, and
   instead removes the symlink (#3097)
 - FilePath now has a linkTo method for creating new symlinks (#3122)
 - The docstring for Trial's addCleanup method now correctly specifies when
   cleanup functions are run (#3131)
 - assertWarns now deals better with multiple identical warnings (#2904)
 - Various windows installer bugs were fixed (#3115, #3144, #3150, #3151, #3164)
 - API links in the howto documentation have been corrected (#3130)
 - The Win32 Process transport object now has a pid attribute (#1836)
 - A doc bug in the twistd plugin howto which would inevitably lead to
   confusion was fixed (#3183)
 - A regression breaking IOCP introduced after the last release was fixed
   (#3200)


Deprecations and Removals
-------------------------

 - mktap is now fully deprecated, and will emit DeprecationWarnings when used
   (#3127)

Other
-----
 - #3079, #3118, #3120, #3145, #3069, #3149, #3186, #3208, #2762


8.0.1 (2008-03-26)
==================

Fixes
-----
 - README no longer refers to obsolete trial command line option
 - twistd no longer causes a bizarre DeprecationWarning about mktap


8.0.0 (2008-03-17)
==================

Features
--------

 - The IOCP reactor has had many changes and is now greatly improved
   (#1760, #3055)
 - The main Twisted distribution is now easy_installable (#1286, #3110)
 - twistd can now profile with cProfile (#2469)
 - twisted.internet.defer contains a DeferredFilesystemLock which gives a
   Deferred interface to lock file acquisition (#2180)
 - twisted.python.modules is a new system for representing and manipulating
   module paths (i.e. sys.path) (#1951)
 - twisted.internet.fdesc now contains a writeToFD function, along with other
   minor fixes (#2419)
 - twisted.python.usage now allows optional type enforcement (#739)
 - The reactor now has a blockingCallFromThread method for non-reactor threads
   to use to wait for a reactor-scheduled call to return a result (#1042, #3030)
 - Exceptions raised inside of inlineCallbacks-using functions now have a
   better chance of coming with a meaningful traceback (#2639, #2803)
 - twisted.python.randbytes now contains code for generating secure random
   bytes (#2685)
 - The classes in twisted.application.internet now accept a reactor parameter
   for specifying the reactor to use for underlying calls to allow for better
   testability (#2937)
 - LoopingCall now allows you to specify the reactor to use to schedule new
   calls, allowing much better testing techniques (#2633, #2634)
 - twisted.internet.task.deferLater is a new API for scheduling calls and
   getting deferreds which are fired with their results (#1875)
 - objgrep now knows how to search through deque objects (#2323)
 - twisted.python.log now contains a Twisted log observer which can forward
   messages to the Python logging system (#1351)
 - Log files now include seconds in the timestamps (#867)
 - It is now possible to limit the number of log files to create during log
   rotation (#1095)
 - The interface required by the log context system is now documented as
   ILoggingContext, and abstract.FileDescriptor now declares that it implements
   it (#1272)
 - There is now an example cred checker that uses a database via adbapi (#460)
 - The epoll reactor is now documented in the choosing-reactors howto (#2539)
 - There were improvements to the client howto (#222)
 - Int8Receiver was added (#2315)
 - Various refactorings to AMP introduced better testability and public
   interfaces (#2657, #2667, #2656, #2664, #2810)
 - twisted.protocol.policies.TrafficLoggingFactory now has a resetCounter
   method (#2757)
 - The FTP client can be told which port range within which to bind passive
   transfer ports (#1904)
 - twisted.protocols.memcache contains a new asynchronous memcache client
   (#2506, #2957)
 - PB now supports anonymous login (#439, #2312)
 - twisted.spread.jelly now supports decimal objects (#2920)
 - twisted.spread.jelly now supports all forms of sets (#2958)
 - There is now an interface describing the API that process protocols must
   provide (#3020)
 - Trial reporting to core unittest TestResult objects has been improved (#2495)
 - Trial's TestCase now has an addCleanup method which allows easy setup of
   tear-down code (#2610, #2899)
 - Trial's TestCase now has an assertIsInstance method (#2749)
 - Trial's memory footprint and speed are greatly improved (#2275)
 - At the end of trial runs, "PASSED" and "FAILED" messages are now colorized
   (#2856)
 - Tests which leave global state around in the reactor will now fail in
   trial. A new option, --unclean-warnings, will convert these errors back into
   warnings (#2091)
 - Trial now has a --without-module command line for testing code in an
   environment that lacks a particular Python module (#1795)
 - Error reporting of failed assertEquals assertions now has much nicer
   formatting (#2893)
 - Trial now has methods for monkey-patching (#2598)
 - Trial now has an ITestCase (#2898, #1950)
 - The trial reporter API now has a 'done' method which is called at the end of
   a test run (#2883)
 - TestCase now has an assertWarns method which allows testing that functions
   emit warnings (#2626, #2703)
 - There are now no string exceptions in the entire Twisted code base (#2063)
 - There is now a system for specifying credentials checkers with a string
   (#2570)

Fixes
-----

 - Some tests which were asserting the value of stderr have been changed
   because Python uncontrollably writes bytes to stderr (#2405)
 - Log files handle time zones with DST better (#2404)
 - Subprocesses using PTYs on OS X that are handled by Twisted will now be able
   to more reliably write the final bytes before they exit, allowing Twisted
   code to more reliably receive them (#2371, #2858)
 - Trial unit test reporting has been improved (#1901)
 - The kqueue reactor handles connection failures better (#2172)
 - It's now possible to run "trial foo/bar/" without an exception: trailing
   slashes no longer cause problems (#2005)
 - cred portals now better deal with implementations of inherited interfaces
   (#2523)
 - FTP error handling has been improved (#1160, 1107)
 - Trial behaves better with respect to file locking on Windows (#2482)
 - The FTP server now gives a better error when STOR is attempted during an
   anonymous session (#1575)
 - Trial now behaves better with tests that use the reactor's threadpool (#1832)
 - twisted.python.reload now behaves better with new-style objects (#2297)
 - LogFile's defaultMode parameter is now better implemented, preventing
   potential security exploits (#2586)
 - A minor obscure leak in thread pools was corrected (#1134)
 - twisted.internet.task.Clock now returns the correct DelayedCall from
   callLater, instead of returning the one scheduled for the furthest in the
   future (#2691)
 - twisted.spread.util.FilePager no longer unnecessarily buffers data in
   memory (#1843, 2321)
 - Asking for twistd or trial to use an unavailable reactor no longer prints a
   traceback (#2457)
 - System event triggers have fewer obscure bugs (#2509)
 - Plugin discovery code is much better behaved, allowing multiple
   installations of a package with plugins (#2339, #2769)
 - Process and PTYProcess have been merged and some minor bugs have been fixed
   (#2341)
 - The reactor has less global state (#2545)
 - Failure can now correctly represent and format errors caused by string
   exceptions (#2830)
 - The epoll reactor now has better error handling which now avoids the bug
   causing 100% CPU usage in some cases (#2809)
 - Errors raised during trial setUp or tearDown methods are now handled better
   (#2837)
 - A problem when deferred callbacks add new callbacks to the deferred that
   they are a callback of was fixed (#2849)
 - Log messages that are emitted during connectionMade now have the protocol
   prefix correctly set (#2813)
 - The string representation of a TCP Server connection now contains the actual
   port that it's bound to when it was configured to listen on port 0 (#2826)
 - There is better reporting of error codes for TCP failures on Windows (#2425)
 - Process spawning has been made slightly more robust by disabling garbage
   collection temporarily immediately after forking so that finalizers cannot
   be executed in an unexpected environment (#2483)
 - namedAny now detects import errors better (#698)
 - Many fixes and improvements to the twisted.python.zipstream module have
   been made (#2996)
 - FilePager no longer blows up on empty files (#3023)
 - twisted.python.util.FancyEqMixin has been improved to cooperate with objects
   of other types (#2944)
 - twisted.python.FilePath.exists now restats to prevent incorrect result
   (#2896)
 - twisted.python.util.mergeFunctionMetadata now also merges the __module__
   attribute (#3049)
 - It is now possible to call transport.pauseProducing within connectionMade on
   TCP transports without it being ignored (#1780)
 - twisted.python.versions now understands new SVN metadata format for fetching
   the SVN revision number (#3058)
 - It's now possible to use reactor.callWhenRunning(reactor.stop) on gtk2 and
   glib2 reactors (#3011)

Deprecations and removals
-------------------------
 - twisted.python.timeoutqueue is now deprecated (#2536)
 - twisted.enterprise.row and twisted.enterprise.reflector are now deprecated
   (#2387)
 - twisted.enterprise.util is now deprecated (#3022)
 - The dispatch and dispatchWithCallback methods of ThreadPool are now
   deprecated (#2684)
 - Starting the same reactor multiple times is now deprecated (#1785)
 - The visit method of various test classes in trial has been deprecated (#2897)
 - The --report-profile option to twistd and twisted.python.dxprofile are
   deprecated (#2908)
 - The upDownError method of Trial reporters is deprecated (#2883)

Other
-----

 - #2396, #2211, #1921, #2378, #2247, #1603, #2463, #2530, #2426, #2356, #2574,
 - #1844, #2575, #2655, #2640, #2670, #2688, #2543, #2743, #2744, #2745, #2746,
 - #2742, #2741, #1730, #2831, #2216, #1192, #2848, #2767, #1220, #2727, #2643,
 - #2669, #2866, #2867, #1879, #2766, #2855, #2547, #2857, #2862, #1264, #2735,
 - #942, #2885, #2739, #2901, #2928, #2954, #2906, #2925, #2942, #2894, #2793,
 - #2761, #2977, #2968, #2895, #3000, #2990, #2919, #2969, #2921, #3005, #421,
 - #3031, #2940, #1181, #2783, #1049, #3053, #2847, #2941, #2876, #2886, #3086,
 - #3095, #3109


2.5.0 (2006-12-29)
==================

Twisted 2.5.0 is a major feature release, with several interesting new
developments and a great number of bug fixes. Some of the highlights
follow.

 * AMP, the Asynchronous Messaging Protocol, was introduced.  AMP is
   a protocol which provides request/response semantics over a
   persistent connection in a very simple and extensible manner.

 * An Epoll-based reactor was added, which can be used with twistd or
   trial by passing "-r epoll" on the command line. This may improve
   performance of certain high-traffic network applications.

 * The 'twistd' command can now accept sub-commands which name an
   application to run. For example, 'twistd web --path .' will start a
   web server serving files out of the current directory. This
   functionality is meant to replace the old way of doing things with
   'mktap' and 'twistd -f'.

 * Python 2.5 is now supported. Previous releases of Twisted were
   broken by changes in the release of Python 2.5.

 * 'inlineCallbacks' was added, which allows taking advantage of the
   new 'yield' expression syntax in Python 2.5 to avoid writing
   callbacks for Deferreds.

In addition to these changes, there are many other minor features and
a large number of bug fixes.

Features
--------
 - log.err can now take a second argument for specifying information
   about an error (#1399)
 - A time-simulating test helper class, twisted.internet.task.Clock,
   was added (#1757)
 - Trial docstring improvements were made (#1604, #2133)
 - New SSL features were added to twisted.internet.ssl, such as client
   validation (#302)
 - Python 2.5 is now supported (#1867)
 - Trial's assertFailure now provides more information on failure (#1869)
 - Trial can now be run on tests within a zipfile (#1940)
 - AMP, a new simple protocol for asynchronous messaging, was added (#1715)
 - Trial's colorful reporter now works on win32 (#1646)
 - Trial test modules may now dynamically construct TestSuites (#1638, #2165)
 - twistd can now make use of plugins to run applications (#1922, #2013)
 - Twisted now works with the latest (unreleased) zope.interface (#2160)
 - An epoll-based reactor, epollreactor, was added. It is selectable
   with the -r options to twistd and trial (#1953)
 - twistd and trial now use the plugin system to find reactors which
   can be selected (#719)
 - twisted.internet.defer.inlineCallbacks was added. It takes
   advantage of Python 2.5's generators to offer a way to deal with
   Deferreds without callbacks (#2100)

Fixes
-----
 - Traceback formatting in Trial was improved (#1454, #1610)
 - twisted.python.filepath.FilePath.islink now actually returns True when
   appropriate (#1773)
 - twisted.plugin now no longer raises spurious errors (#926)
 - twisted.pb Cacheables may now be new-style classes (#1324)
 - FileDescriptor now deals with producers in a more
   interface-compliant and robust manner (#2286, #811)
 - "setup.py build" and other setup.py commands which don't actually
   install the software now work (#1835)
 - wxreactor has had various fixes (#1235, #1574, #1688)

Deprecations and Removals
-------------------------
 - The old twisted.cred API (Perspectives, Identities and such) was
   removed (#1440)
 - twisted.spread.newjelly was removed (#1831)
 - Various deprecated things in twisted.python.components were
   removed: Interface, MetaInterface, getAdapterClass, and
   getAdapterClassWithInheritance (#1636)
 - twisted.enterprise.xmlreflector was removed (#661)
 - mktap is slowly on its way out, now that twistd supports plugins. It
   is not yet officially deprecated (#2013)
 - tkmktap was removed, because it wasn't working anyway (#2020)
 - reactor.iterate calls made inside of a Trial test case are
   deprecated (#2090)
 - twisted.internet.qtreactor was removed: It has been moved to a
   separate project. See http://twistedmatrix.com/trac/wiki/QTReactor
   (#2130, #2137)
 - threadedselectreactor is now not a directly usable reactor; it is
   only meant to help in writing other reactors (#2126)
 - twisted.python.reflect.funcinfo is deprecated (#2079)
 - twisted.spread.sturdy, which was already completely broken, was
   removed (#2299)


Other
-----
The following changes are minor or closely related to other changes.

 - #1783, #1786, #1788, #1648, #1734, #1609, #1800, #1818,
   #1629, #1829, #491, #1816, #1824, #1855, #1797, #1637, #1371,
   #1892, #1887, #1897, #1563, #1741, #1943, #1952, #1276,
   #1837, #1726, #1963, #1965, #1973, #1976, #1991, #1936, #1113,
   #630, #2002, #2040, #2044, #1617, #2045, #2055, #2056, #2022,
   #2052, #1552, #1999, #1507, #2054, #1970, #1968, #662, #1910,
   #1694, #1999, #1409, #2150, #2127, #2155, #1983, #2014, #2222,
   #1067, #2136, #2065, #1430, #2173, #2212, #1871, #2147, #1199,
   #2273, #428, #992, #815, #2024, #2292, #2125, #2139, #2291, #2174,
   #2306, #2228, #2309, #2319, #2317, #2313, #2154, #1985, #1201


2.4.0 (2006-05-21)
==================

Features
--------
 - twisted.internet.task.Cooperator (Added along with #1701).

Fixes
-----
 - Errors in UDP protocols no longer unbind the UDP port (#1695).
 - Misc: #1717, #1705, #1563, #1719, #1721, #1722, #1728.


2.3.0 (2006-05-14)
==================

Features
--------
 - twisted-dev-mode's F9 now uses trial's --testmodule feature, rather than
   trying to guess what tests to run.  This will break files using the "-x"
   test-case-name hack (just use a comma separated list instead).
 - API Documentation improvements.
 - A new Producer/Consumer guide (#53)
 - Better-defined error behavior in IReactorMulticast (#1578)
 - IOCP Multicast support (#1500)
 - Improved STDIO support on Windows. (#1553)
 - LoopingCall supports Deferreds such that it will wait until a
   Deferred has fired before rescheduling the next call (#1487)
 - Added twisted.python.versions.Version, a structured representation
   of Version information, including support for SVN revision numbers
   (#1663)

Fixes
-----

 - Many trial fixes, as usual 
 - All API documentation is now correctly formatted as epytext (#1545)
 - twisted.python.filepath.FilePath.__repr__ is safer.
 - Fix trial's "until-failure" mode. (#1453)
 - deferredGenerator now no longer causes handled exceptions (or
   results) to propagate to the resulting Deferred (#1709).
 - Misc: #1483, #1495, #1503, #1532, #1539, #1559, #1509, #1538,
   #1571, #1331, #1561, #737, #1562, #1573, #1594, #1607, #1407, #1615,
   #1645, #1634, #1620, #1664, #1666, #1650, #1670, #1675, #1692, #1710,
   #1668.

Deprecations
------------

 - Removal of already-deprecated trial APIs: the assertions module,
   util.deferredResult, util.deferredError, util.fireWhenDoneFunc,
   util.spinUntil, util.spinWhile, util.extract_tb,
   util.format_exception, util.suppress_warnings, unittest.wait,
   util.wait
 - The backwards compatibility layer of twisted.python.components
   (e.g., backwardsCompatImplements, fixClassImplements, etc) has been
   disabled. The functions still exist, but do nothing as to not break
   user code outright (#1511)
 - Deprecate the usage of the 'default' argument as a keyword argument
   in Interface.__call__. Passing a second positional argument to
   specify the default return value of the adaptation is still
   supported.


2.2.0 (2006-02-12)
==================

Features
--------
 - Twisted no longer works with Python 2.2
 - FTP server supports more clients
 - Process support on Windows
 - twisted.internet.stdio improved (including Windows support!)
 - Trial:
   - Continued Trial refactoring
   - Default trial reporter is verbose black&white when color isn't supported
   - Deferreds returned in trial tests that don't fire before the
     unittest timeout now have their errback fired with a TimeoutError
   - raising SkipTest in setUp and setUpClass skips tests
   - Test suites are failed if there are import errors

Fixes
-----
 - iocpreactor fixes
 - Threadpool fixes
 - Fixed infinite loops in datagramReceived edge cases
 - Issues resolved: 654, 773, 998, 1005, 1008, 1116, 1123, 1198, 1221,
   1232, 1233, 1236, 1240, 1244, 1258, 1263, 1265, 1266, 1271, 1275,
   1293, 1294, 1298, 1308, 1316, 1317, 1321, 1341, 1344, 1353, 1359,
   1372, 1374, 1377, 1379, 1380, 1385, 1388, 1389, 1413, 1422, 1426,
   1434, 1435, 1448, 1449, 1456

Deprecations
------------
 - Trial:
   - spinWhile and spinUntil
   - util.wait
   - extract_tb and format_exception
   - util.suppressWarnings
   - runReactor is gone


2.1.0 (2005-11-06)
==================

Features
--------
 - threadedselectreactor, a reactor which potentially makes
   integration with foreign event loops much simpler.
 - major improvements to twisted.conch.insults, including many new widgets.
 - adbapi ConnectionPools now have 'runWithConnection' which is
   similar to runInteraction but gives you a connection object instead of
   a transaction. [975]
 - __file__ is now usable in tac files
 - twisted.cred.pamauth now contains a PAM checker (moved from twisted.conch)
 - twisted.protocols.policies.LimitTotalConnectionsFactory now exists,
   which does as the name suggests
 - twisted.protocols.ident now uses /proc/net/tcp on Linux [233]
 - trial now recurses packages by default (a la the old -R parameter)
 - (PB) Calling a remote method that doesn't exist now raises
   NoSuchMethod instead of AttributeError.

Fixes
-----
 - FTP client and server improvements
 - Trial improvements: The code is now much simpler, and more stable.
 - twisted.protocols.basic.FileSender now works with empty files 
 - Twisted should now be much more usable on Pythons without thread support.
 - minor improvements to process code in win32eventreactor
 - twistd -y (--python) now implies -o (--nosave). [539]
 - improved lockfile handling especially with respect to unix sockets.
 - deferredGenerator now no longer overuses the stack, which sometimes
   caused stack overflows.
 - Failure.raiseException now at least always raises the correct Exception.
 - minor improvements to serialport code

Deprecations
------------
 - twisted.python.componts.getAdapter. Use IFoo(o) instead.
 - Adapter persistence (IFoo(x, persist=True)). Just don't use it.
 - log.debug. It was equivalent to log.msg(), just use that.
 - twisted.protocols.telnet. twisted.conch.telnet replaces it.
 - Setting a trial reporter using a flag to 'trial'. Instead of 'trial
   --bwverbose', for example, use 'trial --reporter=bwverbose'.
 - trial --coverage will become a flag in Twisted 2.2.
 - passing a fully-qualified python name to --reporter is
   deprecated. Pass only names of Reporter plugins.
 - trial --psyco.
 - trial -R (--recurse) is now the default, so passing it is deprecated.
 - trial --reporter-args. Use the plugin system to do this sort of thing.
 - trial.assertions.assertionMethod and trial.unittest.assertionMethod
   are both deprecated. Use instance methods on TestCases instead.
 - trial's deferredResult, deferredError, and wait functions. Return
   Deferreds from your test methods instead of using them.
 - Raising unittest.SkipTest with no arguments. Give a reason for your skip.
 - The Failure returned from a gatherResults and DeferredList is now
   of type FirstError instead of a tuple of (Exception, index). It
   supports a firstError[idx] syntax but that is deprecated. Use
   firstError.subFailure and firstError.index instead.
 - whenThreaded now simply calls the passed function synchronously.

2.0.1 (2005-05-09)
===================
Minor bug fix release.

SVN rev (file) - [bug number] description
-----------------------------------------
13307 (twisted/topfiles/README) - Mention support for python 2.4, too
13324 (twisted/internet/defer.py) - [947] Fix DeferredQueue backlog/size limit.
13354 (twisted/plugins/__init__.py) - Correct maintainer address.
13355 (twisted/test/test_defer.py) - improvements to DeferredQueue test case
13387 (setup.py) - add news to list of subprojects to install
13332 (twisted/internet/posixbase.py) - Fix spelling error
13366 (twisted/internet/qtreactor.py) - [957] [954] reactor.iterate fixes
13368 (twisted/test/test_internet.py) - Fix DelayedCall test case
13422 (twisted/internet/posixbase.py) - Remove log from _Win32Waker creation.
13437 (twisted/plugin.py) - [958] Only write cache if there were changes.
13666 (twisted/internet/gtkreactor.py,gtk2reactor.py) - Don't run callbacks
          until the reactor is actually up and running
13748 (twisted/internet/gtk2reactor.py) - [552] [994] Initialize threading properly.


2.0.0 (2005-03-25)
==================

Major new features
------------------
 - Replaced home-grown components system with zope.interface.
 - Split Twisted into multiple pieces.
 - Relicensed: Now under the MIT license, rather than LGPL.
 - Python 2.4 compatibility fixes
 - Major efficiency improvements in TCP buffering algorithm.
 - Major efficiency improvements in reactor.callLater/DelayedCall.
 - Half-close support for TCP/SSL. (loseWriteConnection).

Miscellaneous features/fixes
----------------------------
 - New plugin system: twisted.plugin
 - Better debugging support. Control-C will break you into PDB.
 - The twistd command has --uid --gid command line arguments.
 - *Incompatibility: mktap defaults to not change UID/GID, instead of saving
   the invoking user's UID/GID.
 - Removed some functions that were deprecated since Twisted 1.0.
 - ZSH tab-completion for twisted commands.

 - More correct daemonization in twistd.
 - twisted.python.log: do not close the log because of invalid format string.
 - Disabled automatic import of cBanana. 
 - Boolean support for twisted.persisted.marmalade.
 - Refactor of plugin and application HOWTO documentation
 - Async HOWTO expanded greatly.
 - twisted.python.usage outputs the actual defaults, not passed in values.

twisted.trial
-------------
 - Rewritten, a bunch of bugs fixed, a few more added.

twisted.internet
----------------
 - Multi-listen UDP multicast support
 - protocol.ClientCreator has a connectSSL.
 - defer.deferredGenerator: allows you to write Deferred code w/o callbacks.
 - Deferred.setTimeout is now deprecated.
 - New defer.DeferredLock/DeferredSemaphore/DeferredQueue.
 - Add utils.getProcessOutputAndValue to get stdout/err/value.

 - Default DNS resolver is now non-blocking.
 - Increased default TCP accept backlog from 5 to 50.
 - Make buffering large amounts of TCP data work on Windows.
 - Fixed SSL disconnect to not wait for remote host. Fixes issue with firefox.
 - Separate state for Deferred finalization so that GC-loops preventing
   finalization don't occur.
 - Many Process bugfixes
 - Processes spawned on windows can successfully use sockets
 - gtk2reactor can optionally use glib event loop instead of gtk
 - gtk2reactor notifies gobject to initialize thread support
 - Fix registering a streaming producer on a transport.
 - Close client sockets explicitly after failed connections.
 - ReconnectingClientFactory now continues attempting to reconnect after all
   errors, not just those which are not UserErrors.

twisted.protocols
-----------------
 - Portforward doesn't start reading from a client until a connection is made.
 - Bugfixes in twisted.protocols.loopback
 - Improve speed of twisted.protocols.LineReceiver.
 - LineReceiver implements IProducer. (stop/pause/resumeProducing)
 - SOCKSv4 properly closes connections

twisted.enterprise
------------------
 - Add "new connection" callback to adbapi.ConnectionPool to allow for
   custom db connection setup (cp_openfun)
 - adbapi.ConnectionPool automatic reconnection support
 - Don't log exceptions extraneously


1.3.0 (2004-05-14)
==================

- Address objects for IPv4 and Unix addresses throughout twisted.internet.
- Improved connected UDP APIs.
- Refactored SSH client support.
- Initial implementation of Windows I/O Completion Ports event loop.
- Bug fixes and feature enhancements.
- Nevow support for Lore (so your Lore documents can use Nevow directives).
- This is the last release before Twisted begins splitting up.
