Changes

Version 1.0.3 (07 Oct 2010)

  • Fixed bug when attempting to replace objects locally using an absolute path

Version 1.0.2 (22 Sep 2010)

  • Add warning about “use relative paths” mode
  • Change default back to not using relative paths
  • Fix icons for remote objects

Version 1.0.1 (26 Aug 2010)

  • Restore required files that were missing from the package.

Version 1.0.0 (26 Aug 2010)

  • Make into a normal python package.
  • Set up as a buildout for development.
  • Made compatible with Zope 2.12+, at the expense of no longer being compatible with anything earlier.
  • Converted documentation to Sphinx docs.
  • Send all logging to the python logging framework.
  • Fixed bug whereby pulling from a remote source might report a success even when replacing the object locally had failed.

Version 0.7.2

BREAKING CHANGES:

  • We now REQUIRE Zope 2.7 or later. Does not work with 2.6 anymore. Probably works with 2.7 but if you have problems, 2.8 is recommended.

Features added:

  • A ZSyncer instance now has a config option to delete talkback comments when objects are received. Defaults to off. Not thoroughly tested!

Bugs fixed:

  • Hopefully fixed sf bug #1469129: plone calls an action’s condition expression before checking its permission expression, so, anonymous couldn’t browse the site.
  • Fixed sf bug #1352783: icons disappeared when virtual hosting.
  • Tests for acquisition bugs, seem to be fixed now.

Refactoring:

  • Removed use of zLOG, we now use the python logging module instead. (requires Zope 2.7)
  • Started using absolute_url_path(). (requires Zope 2.7)

Version 0.7.1 (2005/04/10)

Bugs fixed:

  • No more warning about “ambiguous name for method” on startup.

Version 0.7.1-beta1 (2005/12/22)

Bugs fixed:

  • Output message colorization was not working in the ZMI UI.

  • Simplified handling of output messages to use HTTP 1.1 chunking instead of guesstimating the size of output to write. This gives considerably simpler code.

    Doesn’t seem to stream behind Apache / mod_rewrite, but neither did the old version. But at least you get all the output at once when it’s done.

  • Improved breadcrumbs in ZMI UI: We now include the syncer root object as a clickable link. (It was there before, but not always visible.)

Version 0.7.0-final (2005/12/15)

Features added:

  • New methods of ZSyncer: callManyRemote() (moved from ZSyncerTool), and callMethods_() which allows callManyRemote() to make only one request. This is faster than the old implementation, and transactional.

    The plan is to use these to refactor some of the old methods that use several requests for no good reason. This refactoring will be done later in the 0.7 series. Hopefully remove some methods, too. No more new server-side methods will be added before 0.8, so hopefully when upgrading from 0.7 to 0.7.n, you will only have to upgrade on the source server, not necessarily all the destinations.

  • callManyRemote(), callRemote(), callMethod_(), and callMethods_() all now allow you to omit the ‘path’ argument or pass None for it, which results in calling methods directly on the remote syncer itself.

Bugs fixed:

  • Logging now is correctly relative to $INSTANCE_HOME. If your ZSyncer configuration includes a complete path to the log file, and it logs in $INSTANCE_HOME/log/ (which is the default), you should update your ZSyncer instance(s) by removing the $INSTANCE_HOME part of the path. For example, if your $INSTANCE_HOME is /var/www/myZope, and your ZSyncer configuration has the logfile at “/var/www/myZope/logs/ZSyncer.log”, you should change that to “log/ZSyncer.log”.

    This is important if you run multiple ZEO clients on one machine and want them to log to different files, or if you change the path to your $INSTANCE_HOME. Before the bugfix, you’d have problems with either of those scenarios.

Version 0.7.0-beta2 (2005/10/20)

  • Checked in a pretty complete, working zsyncer_folderview.
  • getStatus() now takes an arg to toggle recursion.
  • made is_diffable() private and made it check status, and added its output to the manage_compare() dicts, so templates no longer need to call it, they can just ask the dict.
  • new method of ZSyncerTool: callManyRemote() to call multiple methods on the remote system and return a list of results. Very not optimized.
  • added Delete to ZSyncerTool skins.
  • ZSyncerTool actions now include ${object_url}. This is prevents problems with relative URLs, e.g. if the skin templates do something funny to base href.
  • Added output of getPathInfo() to _getInfoForObject(). This means templates no longer have to call getPathInfo() explicitly, it’s already in manage_listObjects() output.
  • added public method ZSyncerTool.getZSyncer(), which skins now use instead of treating the tool as a mapping. This allows skins to not know about the default syncer name.
  • SyncFolder.zpt links fixed when the syncer(s) are not in the zope root and don’t have a path explicitly set. (sourceforge bug 1325930)

Version 0.7.0-beta1 (2005/10/14)

  • Should work with Zope 2.8 now!

  • The (broken) XMLRPC code has been removed.

  • Began incrementally migrating ZMI pages to ZPT instead of DTML, as things become too painful to maintain. Migrated so far:

    dtml/SyncFolder.dtml -> www/SyncFolder.zpt
    dtml/Diff.dtml -> www/Diff.zpt
  • Some functions and helper classes from ZSyncer.py moved to new module, utils.py. (Tests added for these.)

  • New config variable, “upload_threshold_kbytes”, determines the point at which the server spools data to a temp file instead of RAM. (would be nice if we could re-use one of the temp files already created by zserver, but those are not available to app code afaik.)

  • ZSyncerTool.py is now actually working. Methods now have security declarations. We now have lots of unit tests for it, which all pass. Actions are starting to be sensible. Example skins (for CMFDefault) are getting to be usable, if still missing many features of the ZMI UI.

  • manage_compare now tolerates lack of REQUEST.

  • “delete” now deletes from both local and remote, thanks to Alan.

  • Merged push/pull syncing and the “touch” feature from bastion_branch, thanks Alan!

  • various tweaks and fixes to Alan’s patch.

  • Added many unit tests.

  • response pickles now use protocol 1 (more efficient than the default 0).

  • The “override user” stuff is removed from the UI. You now have to use the proto://user:passwd@server url format. (merged and modified from bastion_branch). This allows ZSyncer to use different auth information to authenticate to each remote system.

    Warning

    you get plaintext passwords in the ZSyncer properties page. Be careful that only trusted administrators have “View management screens” permission on that page!

  • added security declaration to call_().

  • made Dieter’s code more readable.

  • replaced print statements in ConnectionMgr with conditional writes to stderr.

  • SSL connections using ConnectionMgr should now set timeout properly.

  • fixed performance buglet: when syncing to multiple destinations, we now compute the pickle once, rather than once for each destination server.

  • more patches to improve ZClasses support.

  • fix to ordering support: avoid trying to order children of a BTreeFolder (or any subclass of BTreeFolder)

Version 0.6.2

  • added File as one of the default diffable types (SF “bug” 1109156).
  • added BTreeFolder2Base to the default classes with a sync tab.
  • added javascript confirmation to the delete link for extra objects. Note that SF #1053812 describes a better (but more work to implement) solution.

Version 0.6.1 final

  • we now provide an upgrade method if you’re using 0.5.1 or earlier.
  • no more deprecation warning when using CMF 1.5.0
  • some comments to _normalize_time, i attempted to make the timezone configurable but it’s not obvious how i could.
  • Fix to the previous fix since there is no such function as Acquisition.aq_explicit(). whoops.
  • Fix support for Archetypes’ OrderedBaseFolder (apparently only used if running Archetypes on zope < 2.7)

Version 0.6.1-beta2

  • Clear DAV locks from synced items on the destination. Fixes SF bug 988027.

Version 0.6.1-beta1

  • ZSyncerTool actions are now not visible by default.
  • timeout is now configurable in Config.py (at least for ConnectionMgr)
  • re-added connection type info to ZSyncer.stx, and cleaned it up a bit.
  • no longer import names from Config, just import Config.
  • integrating ConnectionMgr.py patch from Alan Milligan, to provide an alternative connection mechanism that works with SSL.
  • added Alan’s test framework. I really need to write some freakin’ tests.
  • _log() no longer needs time argument.
  • log exceptions for all ‘XXX except what?’ comments
  • sf bug 1065062: tolerate lack of absolute_url_path in zope 2.6 or lower.
  • removed connection type info from ZSyncer.stx

Version 0.6.0

This new features release is NOT BACKWARDS COMPATIBLE with versions 0.5.1 or earlier. 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.

  • minor fixes in Folder.dtml: slightly too long paths in recursive mode.
  • fix from sbrauer to error previous ordered folder support patch.
  • xml-rpc disabled until we either fix or remove it

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.