This also removes all multi-threaded calls to the database as they were not working as expected.
The transactions are now used to keep the database in a sane state, but as far as possible log all messages from the connection to the database without using cross-thread requests.
Also fixed some errors with cleanup and rewrote some of the remote filename parsing and validation.
Implemented delete-all-but-n and delete-older-than.
Implemented compacting.
Added the --dry-run option, which currently works for deleting and compacting, but not restore or backup.
Added output to console for use with dry-run, and added option to redirect this to the log for use in service mode.
Rewrote the backup and restore to work within a transaction as that speeds things up a lot.
Rewrote the backup procedure to generate the file list from the database, instead of on-the-fly as that is more efficient.
Re-arranged the database to use less storage on large sets of unchanged files.
Still needs a work over in terms of error handling, progress reporting, warning output, refactoring etc.
Also misses the volume reuse/reclaim algorithms.
But it passes the unit tests now, with and without a local database.
git-svn-id: https://duplicati.googlecode.com/svn/sandboxes/Kenneth/ForestHash@1526 59da171f-624f-0410-aa54-27559c288bec