Version 0.6.0 (IN PROGRESS):

 New features release. NOT BACKWARDS COMPATIBLE.
 You must upgrade ZSyncer on *all* servers that will sync to 
 each other.  You will probably have to reconfigure your ZSyncers too,
 and check your users' permissions since we changed the permission name.

Version 0.6.0-beta3:

 - slight improvements to help/ZSyncer.stx.
 - sf bug 1050115: fixed NameError on diff.
 - sf bug 1046494: fixed broken delete links in Folder.dtml.
 - sf bug 1045682: changed IntType to types.IntType.
 - sf bug 1044687: add_syncable was ignored by Edit.dtml.
 - sf bug 1043112: changed constructor name was out of date in add.dtml.
 - sf bug 1044766: syncing an ordered folder preserves order,
   patch contributed by sbrauer.
 - sf bug 1044766: added ability to blacklist meta-types,
   not just whitelist, patch contributed by sbrauer.
 - More whitespace fixes, no more tabs in Zsyncer.py.
 - changed Folder.dtml links to objects' manage_main to
   manage_workspace instead. Should be what the user wants (some
   objects don't have manage_main).

Version 0.6.0-beta2:

 - ZSyncerTool at least installs correctly now, even if it doesn't
   actually work yet ;-)  But a little attention will get it there.
 - fixed bug in beta1: Add.dtml called wrong constructor.
 - changed permission name to "ZSyncer: Use ZSyncer" to be
   consistent with the usual idiom.
   This is intended to be used for remotely twiddling configuration,
   properties, and the like.
 - added _callRemote which allows you to do just about anything
   on the remote server with security checks.
 - some docstring whitespace normalization
 - normalized order of args to _*Remote()
 - removed some arg defaults where it would be an error to not
   provide them:  _exportRemote, _srcRemote
 - getURLpath replaced with the simpler getPath.

Version 0.6.0-beta1:
 - fixed Folder.dtml for relative paths, syncers in different places.
 - better handling and formatting of diff errors
 - added description of relative mode to README.txt and to the help file.
 - remamed manage_addServer* to manage_addZSyncer*, since
   that's what they do :-)
 - changed signature of manage_replaceObject (nee manage_addRemote):
   obj_path is now first argument, followed by data; 
   removed the add_in argument because we can toggle that based
   on whether data is None.
 - manage_addRemote renamed to manage_replaceObject.
   because it adds an object *locally*, not remotely,
   and in fact it unconditionally deletes but only sometimes adds!
 - manage_srcRemote renamed to manage_getSource, becaues it
   actualy gets the *local* source. 
 - renamed manage_exportRemote to manage_pushToRemote
 - added getFirstDestination() to encapsulate getting a server
   for comparisons, diffs, etc.
 - added ZSyncerConfigError to signal that your config is broken.
 - removed _isSyncable, now just check self.syncable directly.
 - removed getSyncable which has been deprecated since 0.4.
 - renamed dest_server to dest_servers
 - Improved error messages when comparisons fail, see
   getErrorAdvice().
 - removed NotImplemented, it's a builtin, duh.
 - fixed bad relative paths to Manage and View.
 - UI: removed extraneous size for Extra items.
 - now use PropertyManager API for storing configuration.
   Some now-redundant methods removed.
 - fixed typo in _exportRemote that caused apparent hang on sync.
 - added keyword arg support to dieter's ZPublisher.Client stuff.
 - added README note about possible backward incompatibility.
 - changed some misleading "object" arguments to "object_id" or 
   "object_ids" as appropriate.
 - removed incorrect logfile description on Edit.dtml
 - now check against types.FooType instead of type(Foo).
 - now use string methods instead of string module.
 - It's now possible to use paths relative to zsyncer placement.
   This allows you to A) use a different absolute path between
   source and target servers, and B) prevent users from syncing
   anything above the folder where the syncer lives.
 - added some more reserved names
 - some cleanup of whitespace and comments.
 - We now use RESPONSE.write() to stream output messages.
   The old method of RESPONSE.redirect() frequently failed if you
   synced too many objects (query string got too long).
 - No more html in the syncer log!
 - re-named all fooXMLRPC methods to fooRemote... names
   were misleading now that xml-rpc is not the only connection type.
   xml-rpc is an implementation detail.
 - Display now shows local size if available
 - Display now says "Object" instead of "File"
 - Time now shown somewhat like ls -l (i.e. show year if old, hour/minute
   if current year). Show in the source zsyncer's localtime,
   not GMT.
 - Merged Sascha Ottolski's patch to make it easier to
   add Sync tab to classes.  Refactored to put them in Config.py.
 - Merged Dieter Maurer's patch to use ZPublisher.Client and
   cPickle instead of xmlrpc. May help with mixed-encoding data.
   This should improve speed and memory performance too,
   since we don't have to do base64 encoding / decoding
   of the pickles.
 - Made connection type configurable. Default is now ZPublisher.Client.
 - Cleaned up lines > 80 chars.
 - Cleaned up Config.py a bit
 - Added module docstrings to all modules

Version 0.5.1:

 Bugfix release.

 - Fixed obnoxious "KeyError: mode" problem when clicking the "Sync"
   tab from ZMI. Aargh! I had addressed it in Sync.dtml but needed the same
   fix in SyncFolder.dtml. I failed to notice it was still broken,
   because it only occurred when you have just 1 zsyncer instance, and
   my usual work environment has several.
 - Fixed recursive-comparison filtering.
 - Fixed recursive-comparison sorting.
 - Sync page now shows the syncer title. Useful when there are
   multiple syncers.

Version 0.5:

 Sorry folks, we have completely blown the "release early and often" 
 philosophy :-[ Many of these changes are nearly a year old.

 - TODO: added a ton of ideas. Comments welcome.
 - Added ZSyncerTool.py for CMF, by Andy McKay. There is no UI yet,
   write your own :-)  Largely untested.
 - Fixed import problems with ZSyncerTool. 
 - Copied skins/icon.gif to root since ToolInit is dumb about that.
 - Fixed html_quoting problem with Zope 2.6.
 - Added icon.gif to www.
 - Removed icon.gif from www since we don't use it :-)
 - Added license.txt. BSD-style, as agreed by other contributors.
 - Added credits.txt.
 - Added version.txt.
 - Added refresh.txt, then deleted it again :-) products that 
   use monkey-patching are problematic with refresh.
 - Folder.dtml: Added "Toggle". 
 - Folder.dtml: fixed column header ordering.
 - Folder.dtml: Added remote modification time column. 
 - Folder.dtml: Color-coded the key at bottom.
 - ZSyncer.py / Edit.dtml: Added Dieter's patch to support cmf tools in the 
     syncable types list.
 - ZSyncer.py: Fixed incorrect normalization of urls on windows (don't use
     os.path.normpath for that!)
 - ZSyncer.py: Added a bit of zlog blather.
 - ZSyncer.py, Folder.dtml: Added toggleable recursive comparison mode - 
     descends into all sub-folders (and folderish items) and shows all 
     comparison results in the tree, with relative path shown instead of id.
     (BUG: toggles for statuses to show don't work - you get everything.)
 - ZSyncer.py: Removed debugging print from manage_listObjects.
 - ZSyncer.py: manage_compare(folder) changed to manage_compare(path), 
     now works with non-folderish items (result is a sequence with length 1). 
     This is expected to be useful in CMF.
 - ZSyncer.py: Changed to new-style security declarations.
 - ZSyncer.py: Modification time now uses DublinCore timestamp when 
     available, and requires it to match exactly for OK status. 
     (If not available, fall back to old behavior: use bobobase time 
     and assume equal or later destination modtime is OK.)
 - ZSyncer.py: Colorized the sync-result messages.
 - ZSyncer.py, Config.py: Method names used for diffing are now configurable 
     per-type in Config.py.
 - ZSyncer.py: Refactored and replaced some of the internal methods.
 - ZSyncer.py: Added "Use ZSyncer" permission for methods that change things.
 - ZSyncer.py, Config.py: Moved status descriptions to Config.py.
 - Config.py: Added 'Page Template' to Config.py's defaults and as 
     a diffable type.
 - Config.py: Added 'Document' (from CMFDefault) and 'TextElement'
     (from CMFArticle) to diffable types.
 - SyncFolder.dtml: Added stylesheet reference.
 - help/ZSyncer.stx: Added notes about ZEO and multiple destinations to help.

Version 0.4.6:
- Made the filter optional, helps for things like CMF
- xmlrpclib fix for 2.6

Version 0.4.5:
-  Removed title_or_id from the properties of the objects synced so that objects with non ASCII characters in the title dont fail...
-  Change all dates to GMT
-  Uploaded to Sourceforge

Version 0.4.4:
-  Correctly set manage_sync form to view management screens permission
-  Fix HTTPS host header for multiple hosts...

Version 0.4.3:
-   Patch from John Zinti, so https urls arent munged by
    the products.

Version 0.4.2:
-   Bugger, didnt get all the references to folder
-   Manage/View dont show up on extra objects
-   Approval didnt pass through REQUEST correctly

Version 0.4.1:
-   Fixed DTML bugs, esp. in SyncFolder.dtml
-   Add Image and File to default syncable objects

Version 0.4:
-   HTTPS support thanks to peter.brandstrom@appload.net, thanks Peter
-   Moved some things into the config
-   Won't crash on broken objects
-   HTML fixes
-   Folder patch to add in "Sync" tab
-   Won't sync reserved objects (eg standard_html_header)
-   New icon
-   Syncable types *** warning *** please read the help on this, it
means you can sort of limits the types sycned.
-   Help updated

Version 0.3:

-	Added icons into ZMI
-	You can now rummage through all objects with isPrincipiaFolderish = 1,
-	You can sync multiple objects at once. Changed sync link to checkbox.
-	Fixed bug in deleting object
-	After syncing ZMI returns you to the folder you left from
-	You can override the user you sync with, select override and add a 
username and password. This means the user accounts can be different
between source and destination boxes.
-	You can specify your own log file
-	Changed the icon
-	Changed all references of production to destination
-	Changed all references of development to source
-	Changed all instances of unrestrictedTraverse to restrictedTraverse, 
will make security a little better.
