2004-03-05  Kevin Turner  <acapnotic@twistedmatrix.com>

	* Release 1.0.10.

	* cvstoys/config.py (ReloadAction._doLoad): 1.24 call unload/load with
	correct arguments.

2004-03-04  Kevin Turner  <acapnotic@twistedmatrix.com>

	* TODO: 1.29 we have anonymous login and multiple repository support
	has been tested.

2004-03-03  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/fresher.py (updateApplication): 1.38 un-break manhole
	creation.

	* cvstoys/clients/web.py (RecentCommits, NotifieeFactory): 1.31 Factory
	split from RecentCommits for newcred PB transition.
	(makeService): replaces updateApplication as thing-invoked-by-mktap.

2004-02-19  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/fresher.py (Repository.reloadConfig): 1.37 unload before
	loading.

	* cvstoys/config.py (Configuration.load): 1.23 Split unload into
	its own method, not automatically invoked by load.

	* cvstoys/clients/pb.py (ReconnectingPBClientFactory): 1.11
	adopted from buildbot.pbutil.  Thank you Brian Warner.

	* cvstoys/clients/words.py: 1.22
	(Notifiee, NotifieeFactory): split NotifieeFactory from Notifiee,
	use newcred ReconnectingPBClientFactory
	(Service): ported to twisted.application
	(makeService): ported from updateApplication, use newcred

	* cvstoys/actions/pb.py (_PBRealm.requestAvatar): 1.25 spelling
	(PBService.__init__): register an IUsernamePassword checker (the
	only one PB supports).  This implementation is temporary and should
	get some attention before release!

2004-02-15  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/actions/pb.py: Chainsaw refactor for newcred.

	* cvstoys/actions/actions.py (unload):
	* cvstoys/interfaces.py (ICommitAction.unload):
	* cvstoys/config.py (ConfigurationSet.unload): 1.22 return Deferred.

2004-02-14  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/fresher.py (LoginfoListener, updateApplication): 1.34 Port
	to twisted.application.
	(LoginfoListener, PidPlucker, RepositoryTable): 1.35 Componentize!
	These are all components of the same entity now.

2003-09-17  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/actions/pb.py (_PBService & co.): 1.23 make
	start/stopService happen.

	* test/pbtest.sh (make_freshConfig): 1.11 remove global pbPortNumber,
	pass port parameter to PBService instead.

	* cvstoys/fresher.py (DirectoryListProcess.addFiles): 1.33 remove
	message.startsWith("Import") check.  It's not at all valid for CVS
	version 1.12.1.  Was it true for earlier versions, or did I just make
	that up entirely?
	(updateApplication): Don't load the config file here; we don't
	particularly want to create those objects now.  But it turns out
	that loading the config file is what was putting a Repository in
	the RepositoryTable, so we need to explicitly populate one of those
	instead.
	(_Process.processComplete): re-implement a brief pause (callLater
	EPSILON) before running commit actions -- pausing for one second can
	save you the grief of hitting the CVS lock and having it wait thirty
	seconds.


2003-09-07  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/actions/pb.py (PBService): 1.21 Add 'port' parameter,
	replacing the global pbPort variable.

	* cvstoys/config.py (FresherConfiguration.createAdapters): 1.19
	(FresherConfiguration.load): 1.19 There is no longer a parent PB
	service.

	* cvstoys/clients/web.py (CommitsModel.__init__): 1.30 pass orig
	to woven Model.__init__.
	(*.generateDOM): 1.30 getData takes 'request' now.

	* cvstoys/fresher.py (Options): 1.32 Add --manhole-port, now that
	PB services cannot share ports.
	(updateApplication): manhole service must listenTCP seperately.

	* cvstoys/pbservice.py (MultiPBServiceOnnaPort): -1.2 removed;
	killed by newcred, which does not support multiple services on one
	port.

	* cvstoys/loginfo.py (main_func): 1.12 use new PB connection API.

2003-08-17  Kevin Turner  <acapnotic@twistedmatrix.com>

	* bin/loginfo: 1.1 Security fix: remove '' from sys.path before loading
	any modules.

	* TODO: 1.26 Lots of new things to do, gathered from the mailing list.

2003-04-19  Kevin Turner  <acapnotic@twistedmatrix.com>

	* Release 1.0.8.

	* test/atest.sh: 1.18 Exercise the None action.

	* doc/rh-init.d-freshcvs: 1.1 use $TAPDIR for --rundir, because that's
	where shutdown.tap will be written.

2003-04-19  Kevin Turner  <acapnotic@twistedmatrix.com>

	* Release 1.0.7.

	* cvstoys/clients/web.py (CommitsModel.getSubmodel): 1.28 add
	'request' parameter, necessary for current version of Woven.

	* cvstoys/util.py (viewcvs_urls): 1.2 Working links for newly
	added files.

	* test/test_fresher.py (UrlTest): Test cases for viewcvs url
	generation.

	* cvstoys/actions/actions.py (module): 1.13 Don't import PBService
	and MailNotification names, as it breaks when things are imported
	in the wrong order, as seems to happen when resting from -shutdown.tap.
	* cvstoys/actions/mail.py: 1.14,
	* cvstoys/actions/pb.py: 1.20 instead, insert them into the actions
	module from the module they're defined.

2003-04-01  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/config.py (ReloadAction): 1.15 A CommitAction for
	re-loading a Configuration.
	(FresherConfiguration.__init__): 1.15 Sneak a ReloadAction in to
	the configuration's namespace.

	* test/atest.sh (test_reconfigure): 1.17 remove
	'loginfo --reconfigure', it should reload by itself now.

	* README: 1.15,
	* cvstoys/setup.py: 1.12 remove references to --reconfigure.

	* cvstoys/fresher.py (Options.optParameters): 1.31 The option to
	specify an alternate name for the configuration file is gone.  If
	you were using this, let me know and it will come back, but I
	think You Ain't Gonna Need It.
	(LoginfoListener): 1.31 configFileName attribute is gone.

	* cvstoys/setup.py (Options.optParameters): 1.11

	* cvstoys/loginfo.py (Options.optParameters): 1.10
	* cvstoys/fresher.py (Options.opt_pipe): 1.30 Add --pipe for
	specifying the location of the unix socket.

	* TODO: 1.22 I think allowing for the unix socket to be moved out
	of CVSROOT finally does away with the "must have repository write
	access" requirement.
	1.23 Automatic configuration re-load is done.

	* NEWS: 1.22 Mention --pipe.
	1.23 Automatic configuration re-load.

	* test/atest.sh (test_commonPrefix): 1.15 test for bugs in
	determining a common path prefix.

	* cvstoys/actions/actions.py (commonprefix): 1.12 non-broken
	version of os.path.commonprefix.
	(CheckOut.__call__): 1.12 fix case where the directory containing
	files to be checked out does not yet exist.

	* cvstoys/clients/words.py (makeMessage): 1.21 use the better
	commonprefix function.

2003-03-03  Kevin Turner  <acapnotic@twistedmatrix.com>

	* doc/rh-init.d-freshcvs: RedHat /etc/init.d/freshcvs script.

	* README: 1.14 Mention that init thing, and that Debian users
	should be able to use tap2deb(1).

2003-02-27  Kevin Turner  <acapnotic@twistedmatrix.com>

	* Release 1.0.6.

	* TODO: 1.21 Wondering about a corner case, does "the user not
	having write permissions to the repository leads to confusion
	between commitinfo and loginfo"?

	* cvstoys/pbservice.py (MultiPBServiceOnnaPort): Pull this class
	out of fresher.py, it's not at all specific to the application and
	clutters up the module.

	* cvstoys/config.py (module): 1.14 Kaboom! part II.  Gone is the
	ConfigurationSet.preprocess, CommitAction.getAction stuff.  New is
	Configuration.{get,register}Adapter.  Read
	FresherConfiguration.createAdapters to get an idea of what this is
	about.

	* cvstoys/actions/actions.py (CommitAction.getAction): 1.11 gone.

	* cvstoys/actions/pb.py (_PBActionBuilder): 1.19 replacement for
	PBService.getAction.
	(PBService.buildService): 1.19 renamed from setServiceParent, now
	returns the new _PBService instead of setting it as an attribute.

	* cvstoys/fresher.py (module): 1.29 Conform to config module
	restructuring.  Finally, configuration information is stored
	per-repository, not global.  Also, RepositoryTable and Repository
	hold references to the ApplicationService, as it knows stuff that
	configurations have to access.
	(RepositoryTable.sweep): 1.29 remove this
	unused function; Repositories now have important state (their
	Configuration), so they should not be swept away carelessly.

	* NEWS (1.0.6): 1.21 bump version requirement to Twisted 1.0.4, as
	a result of the recent cvstoys.clients.words work depending on
	recent twisted.im work.

2003-02-17  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/config.py (Configuration.load): 1.13 using a copy of the
	globals dict fixes pickling bug.

2003-02-16  Kevin Turner  <acapnotic@twistedmatrix.com>

	* NEWS: 1.20 multilpe group delivery

	* cvstoys/clients/words.py: 1.19 Kaboom!  What was called 'Glue'
	is now 'Service', and it is not Componentized.  Options no longer
	takes 'chat-*' parameters; there is now a config file.  New class
	GroupMessage adapts a twisted.im group to a CommitAction, Crier
	now dispatches to these through a Configuration.  All this to get
	delivery to multiple groups.

	(Service.__init__): 1.20 removed AccountManager, it was serving no
	purpose as it was.
	(Configuration): 1.20 __init__ and load were only dealing with
	AccountManager, they have been removed.

	* cvstoys/config.py (Configuration, FresherConfiguration): 1.12
	Refactor a go-go.
	(ConfigurationSet.getActions): 1.12 new.
	(ConfigurationSet._importLine): 1.12 add a getAdapter on actions.

	* cvstoys/common.py:
	* cvstoys/pidutils.py: 1.2
	* cvstoys/interfaces.py: 1.4
	* cvstoys/actions/mail.py: 1.13
	* cvstoys/actions/pb.py: 1.19 epydoc things

2003-02-12  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/actions/pb.py (_PBService.loadPerspective): 1.18 Deferred.

	* cvstoys/config.py (module): 1.11 Pull global module-level
	functions out into a Configuration class.  Provide backwards-
	compatibility cruft.

2003-02-10  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/fresher.py (updateApplication): 1.27
	s/listenTCP/listenUNIX/, in accordance with recent
	twisted.internet changes.

	(MultiPBServiceOnnaPort.addService, .startListening): fix bug
	where loading a .tap with a single service causes MPBSOP to stop
	listening.  Thanks to Brian Warner for debugging this and sending
	in a patch.

2003-01-30  Kevin Turner  <acapnotic@twistedmatrix.com>

	* Release 1.0.5.

	* cvstoys/fresher.py (MultiPBServiceOnnaPort.__getstate__): 1.25
	Delete more un-persistable things.

	* cvstoys/clients/words.py (TimCrier): 1.17 Don't speak when
	there's no group.
	(Tim.__getstate__): 1.17 Ephemeral.  Still not sure about this.

2003-01-28  Kevin Turner  <acapnotic@twistedmatrix.com>

	* NEWS: 1.19
	* README: 1.12 Bump up Twisted version requirement.

	* cvstoys/fresher.py: 1.24
	* cvstoys/setup.py: 1.10 remove temporary hacks for Twisted 1.0.2alpha4

2003-01-26  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/clients/pb.py (Backoff): 1.8 Factor the back-off timing
	calculation out of the reconnecting class.
	(ReconnectingPB.__getstate__): 1.8 This had been named __getitem__!

	* cvstoys/clients/web.py (Glue.startService): 1.27
	* cvstoys/clients/words.py (Glue.startService): 1.14
	resetDelay is no longer a part of that interface.
	(Tim._reconnect): 1.15 Auto-reconnecting is back!

2003-01-23  Kevin Turner  <acapnotic@twistedmatrix.com>

	* Release 1.0.4.

	* cvstoys/config.py (ConfigurationSet.mapFilesToActions): 1.10
	* cvstoys/fresher.py (_Process.processComplete): 1.23 Handle the
	case of action is None.

2003-01-19  Kevin Turner  <acapnotic@twistedmatrix.com>

	* Release 1.0.3.

	* cvstoys/clients/rsstmpl.py (image_node): 1.1
	* cvstoys/clients/rss.py (ChannelView.render): 1.1
	s/chan_/channel_/ for consistancy.  Fixes RSS bug.

	* cvstoys/fresher.py (MultiPBServiceOnnaPort.__getstate__): 1.22
	remove some ephemereal attributes.

	* cvstoys/actions/pb.py (_PBService.loadPerspective): 1.17
	work-around for the fact that the perspective cache will go away
	when the configuration is reloaded.

	* setup.py: 1.12,
	* MANIFEST.in: 1.4 add recent_template.html

2003-01-19  Kevin Turner  <acapnotic@twistedmatrix.com>

	* Release 1.0.2.

	* NEWS: require 1.0.2alpha4

	* cvstoys/clients/words.py (Options): 1.13 re-named command line
	parameters.

	* README (IRC): 1.11 rewritten.

	* cvstoys/fresher.py (MultiPBServiceOnnaPort.setPort): 1.20 Don't
	use lazy restarts.  Fixes bug where pbPortNo wasn't honored.

	* cvstoys/clients/web.py (CommitsModel, Commit): 1.26
	s/model.Model/model.AttributeModel/, post-1.0.1 woven deprecation

	* cvstoys/clients/recent_template.html (commitList): 1.2
	s/id/pattern/ woven template change

2003-01-18  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/clients/web.py (updateApplication): 1.25 int() the port
	parameter.

	* cvstoys/fresher.py (Options.opt_manhole): 1.19
	* cvstoys/setup.py (main, Options.opt_manhole): 1.8 It's called
	"util.getPassword".

2003-01-17  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/actions/mail.py (MailNotification.__init__): 1.11
	staticFrom paramater sends all mail from this address.

	* TODO: 1.19 The twisted.im changeover happened,
	* README (IRC): 1.10 so this section needs to be rewritten.

	* NEWS: 1.15 twisted.im and MailNotification.staticFrom

2003-01-13  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/clients/words.py: 1.11 First cut of a port to
	twisted.im.  We can now talk to IRC directly instead of bouncing
	through words and tendril.

2003-01-10  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/clients/words.py: 1.10
	* cvstoys/clients/web.py: 1.24
	* cvstoys/clients/pb.py: 1.7
	* cvstoys/actions/pb.py: 1.15
	* cvstoys/actions/mail.py: 1.10
	* cvstoys/actions/actions.py: 1.9
	* cvstoys/util.py: 1.1
	* cvstoys/loginfo.py: 1.9
	* cvstoys/interfaces.py: 1.3
	* cvstoys/fresher.py: 1.18
	* cvstoys/config.py: 1.9
	* cvstoys/common.py (VersionedPatch, Directory, NewImport): Stop
	passing files around as lists of difficult-to-document
	dictionaries, make them VersionedPatchs or Directorys instead.  PB
	client authors, beware!  This change extends to the PB interface too.

	* cvstoys/fresher.py (Repository.getActionsFor): 1.18 Start moving
	toward a repository-centric configurations.

	* cvstoys/actions/pb.py (Notifiee.notify, Notifiee.goodbye): 1.15
	Oops, when Notifiee.client changed in 1.13, some things forgot to
	change.

2003-01-09  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/fresher.py (RepositoryTable, Repository, ProcessTable,
	_Process): 1.17 removed UserDict/UserList subclassing; the accessors
	they provided weren't useful.

	* cvstoys/actions/pb.py (Notifiee, _PBService): 1.14
	* cvstoys/fresher.py (PidPlucker, LoginfoListener): 1.16
	* cvstoys/config.py (ConfigurationSet): 1.8 Make various things
	Versioned that might conceivably need to be.

	* cvstoys/setup.py (Options.opt_manhole): 1.7 '' means no.

	* test/atest.sh: 1.13 no manhole for me, thanks

2003-01-08  Kevin Turner  <acapnotic@twistedmatrix.com>

	* Release 1.0.1.

	* cvstoys/fresher.py (Options.opt_manhole, updateApplication): 1.15
	If given a --manhole command line argument, make a manhole and use
	this as its password.

	* cvstoys/setup.py (Options.opt_manhole, main): 1.6 accept --manhole
	and prompt if the command line doesn't mention it.

	* test/pbtest.sh: 1.10 add a manhole to the test service.

	* NEWS: mention manhole and the pb bugfix.

2003-01-02  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/actions/pb.py (Notifiee.brokerAttached): 1.13 More
	informative log messages for connections, don't let two clients
	attach to the same Perspective.

	* cvstoys/clients/pb.py (PerspectiveInUse): 1.6 new exception to
	raise when a client requests an unavailable perspective.

2002-11-23  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/actions/pb.py (PBService.__init__): 1.12 mention
	pbPortNo and pbAuthorizer.

	* cvstoys/clients/recent_template.html: 1.1 add stylesheet (inline).

	* cvstoys/clients/web.py (CommitsModel.__init__): 1.23 Remove last
	references to deprecated 'mvc' module.
	(HtmlPage.wvfactory_title): 1.23 note this is broken

2002-11-20  Kevin Turner  <acapnotic@twistedmatrix.com>

	* TODO: 1.16 cross off woven.

	* cvstoys/fresher.py (MultiPBServiceOnnaPort.startService): 1.14
	(MultiPBServiceOnnaPort.stopService): 1.14 Make sure return values
	get passed on.

	* cvstoys/clients/web.py: 1.22 woven fixes, RSS clean-ups.

	* test/pbtest.sh (TPID): 1.9 wait for pidfile to appear.

	* cvstoys/clients/rsstmpl.py:
	* cvstoys/clients/rss.py: RSS web Resource.

	* cvstoys/clients/recent_template.html: woven template for recent
	commits web view.

2002-11-16  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/actions/actions.py: 1.8 s/defferreds/deferreds/

	* cvstoys/actions/mail.py (mailCommand): 1.9 Cleanup; fix confused
	code that wrote headers twice.  Thanks to Adrian van den Dries for
	the patch.

	* cvstoys/clients/web.py (RecentCommits): 1.21 wovenify.  Not
	Bug-Free at this point, but working.

2002-11-14  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/setup.py (main): 1.5 Fix forever-looping bug where
	there's exactly one detected repository with bad permissions.

	* TODO: 1.15 two new items

2002-11-13  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/clients/words.py (updateApplication): 1.9 cport is a number

2002-11-10  Kevin Turner  <acapnotic@twistedmatrix.com>

	* Release 1.0.0.

	* cvstoys/actions/mail.py: 1.8 put sendmail's path in a
	module-level variable.

	* MANIFEST.in: add doc/

	* README: Update "About This Release", and mention config.txt.

	* cvstoys/config.py (make_docs): Generate docs for all the things
	that can go in a freshCfg file.

	* cvstoys/actions/actions.py:
	* cvstoys/actions/pb.py (PBService): Fill out some docstrings,
	move notes not for end users from docstring to comments.

2002-11-02  Kevin Turner  <acapnotic@twistedmatrix.com>

	* TODO: 1.13 Cross off pickle thing, haven't reproduced it as of late.
	Add some future features.

2002-10-04  Kevin Turner  <acapnotic@twistedmatrix.com>

	* Release 0.9.6.

	* README (Requirements): 1.7 no more Linux requirement -- we've
	had test runs on Darwin and FreeBSD now that pidutils is not
	required.

	* test/pbtest.sh: 1.8
	* test/atest.sh: 1.12 use python's tempfile module instead of the
	mktemp utility, as the mktemp utility isn't as portable (-d
	doesn't work on Fink.)

	* cvstoys/fresher.py (PidPlucker.remote_loginfo, *.addProcessEntry):
	1.13 accept 'user' argument.
	(_Process.__init__): 1.13 Don't use pidutils to set user
	attribute.  The end of pidutils dependence!

	* cvstoys/loginfo.py (main_func): 1.7 get CVS username from
	environment (CVS_USER or LOGNAME or USER), passed in loginfo call
	to server.
	(main_func): 1.8 use os.getpgrp instead of pidutils.findParentNamed.

2002-10-03  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/fresher.py (DirectoryListProcess): 1.12 New class of
	process for using the commitinfo hack instead of the /proc hack.
	The old one is named PollProcProcess.
	(PidPlucker.remote_hasDirectory): 1.12 remote method for commitinfo.
	(*.addDirectoryForProcess): 1.12 pass down directory information
	from commitinfo.

	* cvstoys/loginfo.py (MyOptions.optFlags): 1.6 --commitinfo.
	(main_func): 1.6 a little refactoring of how the callbacks are set up.

	* cvstoys/setup.py (cvsdance): 1.4 set us up the commitinfo.

2002-10-03  Kevin Turner  <acapnotic@twistedmatrix.com>

        * Release 0.9.5.

	* MANIFEST.in: 1.2 add plugins.tml.

	* setup.py (install_data_twisted): 1.5 evil magic to get
	plugins.tml installed.

	* cvstoys/setup.py (SubprocessError): 1.3 Took the extra 'c' out
	of "proccess".

2002-10-02  Kevin Turner  <acapnotic@twistedmatrix.com>

        * Release 0.9.4.

	* TODO: We should hook commitinfo and use commit_prep's "last
	directory" hack.

	* bin/freshcvs-setup: Run this to have the CVS administrative
	files munged for you.

	* README, test/pbtest.sh, test/atest.sh: use freshcvs-setup.

	* setup.py (scripts): 1.4 add freshcvs-setup

	* cvstoys/setup.py (Options.postOptions): add a --cfg option to
	specify a file to be used for freshCfg, make sure it's valid
	Python.
	(cvsdance): 1.1 be more verbose.
	(cvsdance): 1.2 Use ALL instead of DEFAULT in loginfo.  This way
	we don't have to comment out their previous set-up.

	* cvstoys/actions/pb.py (CommitActionAdapter.__implements__): be a
	tuple, for consistancy's sake.

2002-10-01  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/actions/mail.py (mailCommand): Turns out that the MTA
	sets Sender on its own; I guess I shouldn't bother.

2002-09-30  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/setup.py: The makings of an install script.

2002-09-29  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/actions/mail.py (mailCommand): add "X-Mailer: CVSToys"
	and "Sender:".  I'm not sure I've got Sender right though.

	* cvstoys/fresher.py (excepthook): 1.11 Remove sys.excepthook
	compatibility code.  We're not using 1.5.2 anymore and I can't
	grep can't find anything that's refering to fresher.excepthook.

2002-09-28  Kevin Turner  <acapnotic@twistedmatrix.com>

        * Release 0.9.3.

	* MANIFEST.in: Add bin/ to the manifest.  Apparently distutils
	doesn't figure out that if it's in the list of scripts to install,
	that it should distribute it.

2002-09-27  Kevin Turner  <acapnotic@twistedmatrix.com>

	* README: We're making progress.

	* cvstoys/actions/pb.py (PBService.setServiceParent):
	s/KeyError/DuplicateIdentity/, requiring Twisted 0.99.3alpha2.

2002-09-27  Kevin Turner  <acapnotic@twistedmatrix.com>

        * Release 0.9.2.

	* TODO: schwacked the reloading problem, but shutdown still is
	in a nasty pickle.

	* cvstoys/interfaces.py (INotifieeClient.remote_goodbye): Called
	when the server wants you to leave.

	* cvstoys/clients/words.py (Crier.goodbye)
	(Notifiee.remote_goodbye):
	* cvstoys/clients/web.py (RecentCommits.remote_goodbye): terminate
	connection on goodbye.
	(RecentCommits.remote_notify): short log.msg on notify.

	* cvstoys/actions/pb.py (PBService.setServiceParent): Don't have a
	cow if the authorizer already has the user named in the 'userpass'
	argument.
	(CommitActionAdapter.unload, _PBService.sendGoodbyes)
	(Notifiee.goodbye): Say goodbye on unloading.

	* cvstoys/fresher.py (MultiPBServiceOnnaPort.stopListening): Don't
	stop listening immediately, but wait for stopDelay to pass first.
	Much less commotion this way if the only service stops and
	immediately re-starts.

	* test/pbtest.sh (test_reconfigure): throw in a --reconfigure

	* cvstoys/clients/pb.py (ReconnectingPB.retry): s/jitter/self.jitter/

2002-09-26  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/loginfo.py (reconfigure): eat the "connection failed"
	errback that was happening after --reconfigures.

	* cvstoys/fresher.py (updateApplication):
	(LoginfoListener.startService): Much cleaner configuration loading.
	(MultiPBServiceOnnaPort): A Multi-Service to hold PB services in,
	just in case you want any.  Seperates the port-binding from the
	Action-construction, which should make reloading config files with
	PB actions in them much saner.  Requires Twisted 0.99.3alpha1.

	* cvstoys/config.py (load): take a serviceParent argument, set it
	on the ConfigurationSets.
	Apply pbPortNumber and pbAuthorizer from the configuration file to
	the pbservice collection.
	(ConfigurationSet.mapFilesToActions): CommitActions may be
	Componitized.
	(ConfigurationSet.process): finalizes the construction of the
	ConfigurationSet, this should be called after you've had a chance to
	set attributes like serviceParent.

	* cvstoys/actions/pb.py (_PBService): Componentize somewhat.
	(PBService.__init__): Take a lot of junk out of here that's
	now handled by the multiservice.

	* cvstoys/actions/actions.py (CommitAction.unload):
	* cvstoys/interfaces.py (ICommitAction.unload): called before the
	configuration is discarded due to a configuration reload.

	* test/pbtest.sh (make_freshCfg): different method of specifying
	port number now.

2002-09-25  Kevin Turner  <acapnotic@twistedmatrix.com>

        * Release 0.9.1.

	* cvstoys/clients/web.py (AbstractCommitList.display): Catch up to
	my latest iteration of Last-Modified interface.

2002-09-23  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/clients/web.py (AbstractCommitList.newETag): add ETags
	(AbstractCommitList.wasModifiedSince): 1.17 return deferred

2002-09-22  Kevin Turner  <acapnotic@twistedmatrix.com>

	* MANIFEST.in (Module): include test/ directory in source
	distribution.

2002-09-21  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/clients/web.py (AbstractCommitList.wasModifiedSince): 1.15
	now supporting If-Modified-Since requests.

	* NEWS: Interesting changes go here.

2002-09-21  Kevin Turner  <acapnotic@twistedmatrix.com>

        * Release 0.9.0.

	* README (About this Release): 1.4 New section, warns of bugs.

2002-09-19  Kevin Turner  <acapnotic@twistedmatrix.com>

	* test/atest.sh (test_reconfigure): 1.10 use loginfo in bin,
	solves mysterious failure to reconfigure.

	* cvstoys/fresher.py (EPSILON): 1.7 wait just a bit to step on
	less cvs locks.

	* cvstoys/actions/actions.py (BasicProcessProtocol.processEnded): 1.2
	* cvstoys/actions/mail.py (CvsDiffProtocol.processEnded): 1.2
	Process now gives us a ProcessEnded reason with a real exit code.
	(MailNotificationRequest.makeDiffs): 1.2 Don't make diffs of
	changes without two defined revisions.  This makes the tests run
	much cleaner.

	* README (Module): 1.3 added some links to the competition.

	* cvstoys/actions/mail.py (mailCommand): 1.2 use /usr/lib/sendmail
	instead of mailx, for cause of portability.  Thanks to Jp for the
	patch.

2002-09-09  Kevin Turner  <acapnotic@twistedmatrix.com>

	* README (Module): 1.2 some hints about how to get things running.

	* setup.py (Module): 0 distutils support

	* bin/loginfo: run this instead of the .py from inside the cvstoys
	package.

	* cvstoys/loginfo.py (warn): 1.3 killed in favour of log.msg.
	(main): 1.3 to be run by bin/loginfo.

	* test/pbtest.sh (Module): 1.3
	* test/atest.sh (Module): 1.9 use bin/loginfo

2002-09-07  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/clients/web.py (HtmlList.display): 1.8 Snazzier HTML
	presentation now.
	(HtmlList.display): 1.10
	(RssItem.display): 1.10 html.escape things

2002-09-05  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/clients/pb.py (ReconnectingPB): moved to clients package.

	* test/atest.sh (verify_mirror): 1.8 determines if rsync mirror worked

	* cvstoys/clients/words.py (Module): 0 moved from cvstoys.bot

	* cvstoys/clients/web.py (Module): 0 publish notification over
	RSS and HTML

	* cvstoys/actions/actions.py (Module): 0 cvstoys.actions moved to
	cvstoys.actions.actions, some split out into seperate modules:
	* cvstoys/actions/pb.py
	* cvstoys/actions/mail.py

2002-09-01  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/bot.py: tapified and reconnecting

	* cvstoys/plugins.tml: 1.1 cvs words bot

	* test/pbtest.sh: 1.1 use mkwap and twistd

2002-08-31  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/plugins.tml: Register fresher with Twisted plug-ins.

	* cvstoys/fresher.py (Process): 1.3 Stop using _delayed.loop in
	favour of reactor.callLater.
	(updateApplication): 1.3 formerly named 'mktap', this function is
	now twisted.python.plugin compatible.

	* test/atest.sh: 1.7 use mktap and twistd now.

	* cvstoys/*: 1.1 Add a BSD type license to all headers.

	* test/pbtest.sh (Module): test script for PB service.

	* cvstoys/bot.py (Module): Words bot to give CVS notifications.

	* cvstoys/actions.py (CheckOut.__call__): 1.3
	(Rsync.__call__): 1.3 Oops.  Splitting a path on whitespace?  Fixed.
	(ICommitAction.getAction): 1.3 new interface method
	(PBService): 1.3 At last, notification over Perspective Broker.
	(module): 1.3 s/\bfile\b/fil/ to avoid clash with builtin.

2002-08-29  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/fresher.py (Process.pulse): 1.1 use reactor.callLater
	instead of 'later' on a random delayed, remove 'applyAndArm'.

	* test/atest.sh: 1.6 Don't use "realpath", as it isn't as widely
	installed as I thought it was.

	* cvstoys/actions.py (*Command): 1.1 Switch to new Process API
	with reactor.spawnProcess and ProcessProtocols.
	(module): 1.2 removed several .arm() calls.

2002-08-28  Kevin Turner  <acapnotic@twistedmatrix.com>

	* cvstoys/loginfo.py (Module): 1.1 s/main/reactor/

	* test/atest.sh: 1.5 make directories not hard-coded

2002-04-25  Kevin Turner  <acapnotic@twistedmatrix.com>

	* fresher.py (Process.pulse): Now that the actions return
	Deferreds, they need to be armed.  There really ought to be a
	better way to use Deferreds in conjunction with Delayeds than
	this.

	* actions.py: Refactoring of all the CommitAction.__call__ methods
	to return Defferreds, enabling the creation of the "Serial" action
	chain.

2002-04-19  Kevin Turner  <acapnotic@twistedmatrix.com>

	* loginfo.py (reconfigure): configuration reloading

	* test/atest.sh (test_reconfigure): test for configuration reloading

2002-04-18  Kevin Turner  <acapnotic@twistedmatrix.com>

	* loginfo.py (MyOptions.parseArgs): Try to deal with both the
	filenames-as-single-quoted-argument and
	filenames-as-seperate-arguments cases.  Ick.
	Also some compatibility changes for Options and juggling blocks of
	code around.

	* fresher.py: compatibility changes in Options and others.

	* config.py (set_GlobalConfigs): access globalConfigs only through
	accessor functions.

	* actions.py (viewcvs_urls): don't break on files in the module's root
