TODO list for s3cmd project
===========================

- For 0.9.9.x
  - Make 'sync s3://bkt/some-filename local/other-filename' work
    (at the moment it'll always download).
  - Enable --exclude for [ls].
  - Allow change /tmp to somewhere else
  - With --guess-mime use 'magic' module if available.
  - Support --preserve for [put] and [get]. Update manpage.
  - Don't let --continue fail if the file is already fully downloaded.
  - Option --mime-type should set mime type with 'cp' and 'mv'. 
    If possible --guess-mime-type should do as well.
  - Skip files that disapper during upload. Now it fails.
  - Make upload throttling configurable.

- For 1.0.0
  - Add 'geturl' command, both Unicode and urlencoded output.
  - Add a command for generating "Query String Authentication" URLs.
  - Add a command for setting up access logging.

- After 1.0.0
  - Speed up upload / download with multiple threads.
  - Sync should be able to update metadata (UID, timstamps, etc)
    if only these change (i.e. same content, different metainfo).
  - Sync must backup non-files as well. At least directories, 
    symlinks and device nodes.
  - If GPG fails error() and exit. If un-GPG fails save the 
    file with .gpg extension.
  - Keep backup files remotely on put/sync-to if requested 
    (move the old 'object' to e.g. 'object~' and only then upload 
     the new one). Could be more advanced to keep, say, last 5 
     copies, etc.
  - Memory consumption on very large upload sets is terribly high.
  - Implement per-bucket (or per-regexp?) default settings. For
    example regarding ACLs, encryption, etc.

- Implement GPG for sync
  (it's not that easy since it won't be easy to compare
   the encrypted-remote-object size with local file. 
   either we can store the metadata in a dedicated file 
   where we face a risk of inconsistencies, or we'll store
   the metadata encrypted in each object header where we'll
   have to do large number for object/HEAD requests. tough 
   call).
  Or we can only compare local timestamps with remote object 
  timestamps. If the local one is older we'll *assume* it 
  hasn't been changed.

- Keep man page up to date and write some more documentation
  - Yeah, right ;-)