-*- Org -*-

Changes in 0.5 (since 0.4)

* New features

** New encrypted backup utility: `chop-backup'

See the manual for details.

** The `-z' option of `chop-archiver' now also applies to meta-data

In other words, the zip/unzip filters are now applied both to data and
meta-data when a specific store is specified with `-f'.

** Guile bindings: New procedures `make-zip-filter' and `make-unzip-filter'

* Bug fixes

** Fix off-by-one in `fs_block_store'
** Fix return value of `fs_block_store.read_block' with non-existent blocks
** Fix off-by-n in ASCII deserialization of CHK/hash index handles
** Fix possible infinite loop in `lzo_unzip_filter'
** guile2: Have `stream->port' let unhandled exceptions through

* Packaging

** G-Wrap-based Guile 1.8 bindings removed


Changes in 0.4 (since 0.3)

* New features

** New Scheme bindings for GNU Guile 2.0

See "Guile Bindings" in the manual for details.  The Guile 1.8 bindings
based on G-Wrap will be removed in a future version.

** New `--archive-fd' option for `chop-archiver'

This allows the archival of data from an arbitrary file descriptor,
as in "tar cf - /foo/bar | chop-archiver --archive-fd".

** New `CTR' and `AESWRAP' cipher modes (from libgcrypt)

** New function: `chop_file_stream_open_fd'

* Packaging improvement, bug fixes

See `ChangeLog' for details.


Changes in 0.3 (since 0.2)

* New features

** New file system based block store

The `chop_fs_block_store' stores data blocks as a tree of files in the
user's file system, in a way similar to what Git does.  The main
advantage is its file system interface.  It makes it easy to rsync it to
a remote site or to publish it over FTP or HTTP, for instance, which can
be useful when the remote site cannot run `chop-block-server'.

** Block-level data integrity checks

The `chk' and `hash' block fetchers now return an error when retrieving
a block that has been tampered with.  They do so by comparing the hash
of the block with its key, and expect them to be the same.


** `chop-archiver --archive' implements incremental storage by default

By default, only blocks not already available in the block store are
written.  It makes incremental storage very fast (e.g., when
archiving a file that has already been stored, or when storing a file
that contains data similar to what's already available in the store) and
saves bandwidth when using a remote block store.  The `--no-smart-store'
option disables it.

* Packaging

** GNU gperf is now required

** A C99 compiler is now required (instead of C89)


Copyright (C) 2010, 2011  Ludovic Courtès <ludo@gnu.org>

  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
  notice and this notice are preserved.
