File Synchronization for Zope3
==============================

The FSSync project (zope.app.fssync) provides support for filesystem
synchronization of Zope3 content that resides in a ZODB. This package defines
a Web-based API with basic support for some standard zope.app content
types and the standard security policy.

This project is build on top of the more general zope.fssync package
which provides object serialization and deserialization tools. If you
need a pure Python API which is independent of the ZODB and the Zope3
security machinery you should look at zope.fssync.

FSSync includes a command line client that resembles svn or cvs. Type::

    bin/zsync help

for available commands and further information. If you want to see the zsync
client in action you can run the demo application::

    bin/demo start

Open http://localhost:8080/manage in your browser and login with
``zsync`` as your username and password. Add a ``demo`` folder with
some files via the ZMI.  After that run the command line client for an
initial checkout::

    bin/zsync checkout http://zsync:zsync@localhost:8080/demo ./parts/checkout

Edit one of the files in the checkout directory and commit the changes::

    bin/zsync commit ./parts/checkout

The modified file should now be available on the server.


SSH
---

Zsync now supports communication over ssh in addition to http. ssh
urls look like::

  zsync+ssh://user:passwd@host:port/path

The zsync protocol is the same as over HTTP, it simply is sent via
ssh.

On the server side, the ssh server can check public keys to enforce
security (though the demo server doesn't bother), and is responsible
for passing the zsync request to zope and returning the response over
ssh.

There is an example ssh server in src/zope/app/fssync/demo_server.py
To use it, first make sure that zope is running. Then start the
server::

    sudo bin/demo-ssh-server

This starts a demo ssh server on port 2200. The server must be run as
root in order to read the ssh host keys.

In another terminal use the zsync client to connect to it::

    bin/zsync co zsync+ssh://zsync:zsync@localhost:2200/demo parts/co2

This checks out the demo folder into the parts/co2 folder.

You should be able to work in the check out normally. Zsync will use
ssh to communicate, but will otherwise act normally.


Extending zsync
---------------

The zsync script is generated by the following part of the buildout.cfg::

    [zsync]
    recipe = zc.recipe.egg
    eggs = zope.app.fssync
    entry-points = zsync=zope.app.fssync.main:main

If you want to use zope.app.fssync in your own application you
propably have to define application specific serializers and
deserializers. See zope/app/fssync/fssync.txt

for further documentation. You probably also need your own zsync script with
additional dependencies. Simply add the necessary eggs to the corresponding
buildout snippet of your project.

