Copyright (c) Martin Wilck 2006
Updated April 5, 2010, by Steve Steiner for Python 2.5+ and ftputil 2.4.x

See the file LICENSE for copyright information.

ftpsync is a tool, written in Python, for mirroring (uploading) data to FTP
servers. It is built upon functionality in Stefan Schwarzer's ftputil package.

Older versions had been been tested with Python 2.3 and 2.4 and ftputil 2.1
under Linux.

This version has been tested with Python 2.5+ and ftputil 2.4.2 on OS X, and
Linux. It is not known to be incompatible with older Pythons, it just hasn't
been tested.

Usage: ftpsync.py [options] host source-dir target-dir

Known options: --exclude=<pattern>,
               --include=<pattern>,
               --exclude-from=<pattern-file>,
               --include-from=<pattern-file>,
               --delete,
               --delete-excluded,
               --dry-run,
               --verbose, --quiet, --debug,
                   --trace=<log file>,
               --cache-expire=<seconds>,
                   --cache-size=<entries>

Most options are equivalent to rsync(1)'s respective options.

Features:
    * include/exclude logic like rsync(1).
      (Note: there is a script called rsync.py in the Python package index.
      I have tested it and found it did not mimic rsync's logic correctly).
    * Caching of FTP directory contents (simple FTPHost._dir() caching,
      but speed up can be quite big)
    * Deals with case-insensitive FTP server

TODO:
    * download script
    * proper packaging
    * ...

Files in this directory:

    * ftpsync.py:       main script

    * caching_ftp.py:   CachingFTPHost object, derived from ftputil
    * casepath.py:      case-insensitive 'path' and 'stat' objects, derived from ftputil

    * sync.py:          abstract synchronizing logic
    * rsyncmatch.py:    rsync-style globbing and include/exclude patterns
    * casestr.py:       case-insensitive string class
    * simplecache.py:   a very simplistic cache implementation
    * loggingclass.py:  a small commodity layer above 'logging'
