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.
