17/03/2018 - protocol update - version 1.3.0
	* syncmaildir.lua:
	  - automatic recover when interrupted just before
	    renaming *.db.new into *.db (was causing db-mismatch error)
	* repo:
	  - switch to github
	* README, DESIGN:
	  - switch to markdown
	* Makefile:
	  - remove gconf leftover

18/11/2015 - minor bugfix - version 1.2.6.2
	* smd-common:
	  - signal failure in creating a temp file (disk full?)
	* mddiff:
	  - when acting as a sha1 slave, be resilient to empty files
	* smd-common:
	  - consider an empty file as non-existing (no conflicts)

22/05/2015 - update vala code to 0.26 - version 1.2.6.1
	* smd-applet:
	  - compile with valac 0.26
	  - use libgee ABI 2 (gee-0.8.pc)

14/03/2014 - feature improvement and gui redesign - version 1.2.6
	* mddiff, smd-client, DESIGN:
	  - Emit MOVE command when appropriate.  This optimization and its
	    implementation was desined by Jesus Cea to make smd ZFS friendly
	  - --no-move option for retrocompatibility with smd-uniform-names
	* test.d/:
	  - new tests for the MOVE command
	* smd-applet:
	  - Redesign the applet with GNOME3 in mind
	  - Do not use Gtk.HBox (deprecated in favour of Gtk.Grid)
	  - Switch from GConf to Gsettings
	  - Compile with valac 0.22
	* smd-common, README:
	  - Suggest to use "User" and not "Username" for ssh configuration.
	    Thanks Kim Christensen for spotting that.

11/06/2012 - minor fix release - version 1.2.5
	* mddiff:
	  - Hashtable from body sha1 to mail now holds a list of
	    mails so that COPY actions are generated whenever possible.
	    It used to be the case that on body collisions a COPYBODY
	    action could have been generated instead.
	  - Fix: --sha1sum works on empty files too
	  - Better error messages for malformed db-file (including line number)
	* syncmaildir.lua:
	  - During handshake handle the case in which mddiff is unable to
	    sha1sum the db file
	  - Code for calling external tools refactored
	  - Optimize calls to external translator spawning only
	    one process (translators must be line bufferd now)
	* smd-uniform-names, smd-client:
	  - Fix escaping of ~ that was always performed on the local host
	  - Handle server ERROR messages while computing renamings
	  - Generate better smd-rename.sh script that calls cp instead
	    of mv if the source message has to be used later on
	* smd-client:
	  - Mode --dry-run prints the list of messages transferred over the
	    network

28/05/2012 - minor feature improvement - version 1.2.4
	* smd-uniform-names:
	  - New tool to ease the migration from offlineimap. 
	    When the mailboxes have roughly the same content but emails are
	    named differently this tool generates a shell script that
	    renames local mails to conform to the remote mailbox
	* smd-applet:
	  - XDG compliant autostart, with a button in the options window
	  - Target GLib 2.32 and Gtk+ 3.0 for the .ui file
	* smd-push, smd-pull, smd-common, smd-client, smd-server:
	  - New option -n --nodelete to not propagate deletions
	  - Support for local synchronizations: -l option to smd-client.
	    It is now possible to set SERVERNAME=localhost and pass -l
	    to smd-client (via SMDCLIENTOPTS) to obtain a synchronization
	    on the same host. (Thanks Miguel Fernandes for the idea
	    and his time for testing/debugging my prototype implementation).
	  - Do not use ssh if it is a local synchronization
	  - Support for SMDCLIENTOPTS and SMDSERVEROPTS in config file
	  - Code refactoring for external tools invocation
	  - Put a minimal README in the hooks/ directory to tell the user
	    what these directories are for
	  - Fix inconsistency in escaping of the value of TRANSLATOR_LR/RL
	  - Turn off grep buffered mode for progress reporting (Thanks
	    Stefano Zacchiroli for enlightening me on the subject)
	* smd-translate:
	  - Fix bug in removing trailing / or " or ' from the
	    MAILBOX_REMOTE/LOCAL value
	  - New trasnlator mode: 'move'. It just replaces MAILBOX_LOCAL
	    with MAILBOX_REMOTE and vice versa, useful for local
	    synchronizations
	* mddiff:
	  - New option -n --no-delete to not generate DELETE actions
	* Makefile:
	  - Fix templates: C/LDFLAGS are now correctly preserved
	* README:
	  - Update copyright dates to include 2012
	  - Document smd-uniform-names

03/03/2012 - minor feature improvement - version 1.2.3
	* smd-pull, smd-push:
	  - print progress report if -v is passed
	* smd-client:
	  - generate progress report if verbose mode is on
	  - generate verbose progress report during first synchronization
	  - log "translating:" only when meaningful (i.e. not a noop)
	* smd-common:
	  - create a new fifo for progress reporters
	  - standard progress reporter printing on stdout PROGRESS: lines
	  - use mddiff as mkdir and mkfifo (no more calls to mkfifo and mkdir)
	* smd-applet:
	  - ported to vala 0.16
	* smd-loop:
	  - fixed cleanup process (Thanks Ralf Schmitt for the patch)
	* smd-restricted-shell:
	  - new utility to be used in .ssh/authorized_keys, see the command=
	    option (Thanks Luca Capello for the idea and the documentation)
	* syncmaildir.lua:
	  - When mddiff fails to sha1 a message print the file name (thanks 
	    Zhengdao Wang for the idea)

01/12/2011 - minor fix - version 1.2.2
	* smd-config.5:
	  - fixed typo and use `quotes' to delimit strings
	* smd-common:
	  - fixed temp file leak
	  - fixed stale lock file detection
	* mddiff:
	  - add --sha1sum to avoid depending on the sha1sum external utility
	  - add --mkdir-p to avoid depending on the mkdir external utility
	  - add --mkfifo to avoid depending on the mkfifo external utility
	  - print OK on successful symlink creation
	  - updated copyright
	* syncmaildir.lua:
	  - use mddiff to create symlinks to remove dependency over ln

10/09/2011 - minor feature improvement - version 1.2.1
	* mddiff:
	  - support for --exclude via fnmatch(3) to filter out unwanted
	    directories
	* smd-server, smd-push, smd-common:
	  - thread around --exclude
	* smd-check-conf:
	  - many bug fixes
	* README:
	  - document EXCLUDE
	  - reorganized
	* smd-applet:
	  - ported to vala 0.13.3
	  - removed embedded copy of libnotify.vapi/deps

07/09/2011 - major feature improvement - version 1.2.0
	* all tools:
	  - support for renaming mailboxes thanks to translator programs:
	    useful to switch from offlineimap to smd
	  - -d option now implies -v
	* smd-translate:
	  - common translator utility to handle renaming typical imap servers
	  - support dovecot imap server (removal of leading dots)
	* smd-check-conf:
	  - utility to test for round trip of translators on the current
	    list of mailboxes and perform some other sanity checks
	* mddiff:
	  - accept -l to list all mailboxes rooted in the given paths
	  - accept -s to create symlinks reading input on a fifo
	  - minor improvement: basename/g_path_basename now called
	    only once per mail folder
	  - directory handler leak fixed
	* smd-common:
	  - accept -s to show tags, while -v is used for more verbose output
	  - sanitize input of MAILBOX like variables
	* smd-client:
	  - reworked to fix once and for all (hopefully ;-) the problems with
	    names containing spaces
	* syncmaildir.lua:
	  - better report a network error
	* smd-applet:
	  - notification.set_hint "transient" called with a boolean GVariant
	    to avoid crashing the notification-daemon
	* Makefile:
	  - minor improvements w.r.t. test running
	  - eye candy stats target
	* tests.d:
	  - support tests for smd-push
	  - test for renaming
	* smd-config.5:
	  - new manpage for the configuration file

24/07/2011 - minor fix 4 Faidon - version 1.1.6
	* smd-pull, smd-push:
	  - mention --dry-run option in manpage
	* mddiff,syncmaildir,smd-client,smd-server:
	  - properly handle file names with spaces
	* test.d:
	  - new test for file names with spaces
	* mddiff:
	  - if we get EPERM opening a mail we retry without O_NOATIME since
	    that option is allowed only on files owned by the euid of the
	    process (unless you have CAP_FOWNER). These files were previously
	    skipped, but it may be the case one has old crap owned by a
	    different user in his mailbox, like an old broken uid. Thanks
	    Faidon for debugging this issue

03/07/2011 - minor fix - version 1.1.5
	* smd-applet:
	  - Ported to NetworkManager 0.9 APIs (GNOME 3)
	  - Ported to libnotify 0.7
	  - Ported to GTK+-3.0
	  - Windows spacings conforming to the GNOME guidelines

04/03/2011 - minor fix - version 1.1.4
	* Makefile:
	  - add / in front PREFIX when generating smd-config.h

04/03/2011 - minor fix to the build system release - version 1.1.3
	* Makefile:
	  - compact compilation output: CC, VALAC
	    call `make H=` to enable verbose output again
	  - error message for too old glib version improved
	  - automatic generation and update of smd-config.h based on Makefile 
	    variables, both the static and the command line ones
	  - better warnings if there is no valac but any vala file changed
	  - no more -DVERSION compile flag, since all compiled code includes
	    the same smd-config.h file
	* mddiff.c: 
	  - include smd-config.h for SMD_CONF_VERSION
	* smd-config.vapi:
	  - bind smd-config.h to vala
	* config.vala:
	  - removed: smd-config.h is used by smd-applet.vala thanks to 
	    smd-config.vapi

03/03/2011 - maintenance release - version 1.1.2
	* smd-applet.vala:
	  - ported to valac 0.10
	  - ported to GDbus (package gio-2.0)
	  - build dependency over vala removed: config.c and smd-applet.c
	    are now included in the tarball
	* mddiff.c:
	  - compile with additional -Wcast-align flag
	  - use %zc to print size_t, if available
	  - compute the default for --max-mailno using the number of lines
	    in the db-file (if available) and adding 1000 (as the max amount
	    of new mails). Overestimating the amount of memory needed can
	    make malloc fail if the system is under heavy loads. --max-mailno
	    still makes sense for the first run, since there is no db-file to
	    look at.

14/10/2010 - minor fix - version 1.1.1
	* syncmaildir.lua:
	  - tmp_for fixed: the pid component is now a unique index instead of
	    a fixed one. 
	    
	    The old code Was causing troubles when receiving more then 10 
	    mails during the same second and in the same mailbox and when
	    the pid component of the mail name was not made just of digits. 
	    
	    The regular expression to capture the pid component has also been
	    relaxed accepting "_" too.

01/09/2010 - minor feature release - version 1.1.0
	* smd-loop:
	  - when run, immediately execute the first pull/push scheduled.
	    it used to sleep for its interval
	* smd-applet:
	  - connect to NetworkManager to query network status, if the
	    connection is not present, we enter pause mode.

15/06/2010 - minor fix - version 1.0.0
	* smd-applet:
	  - recognize mailto: actions so that a nice label is used
	    istead of the raw command that comprises subject and body
	  - ported to vala 0.9.1, use .connect instead of deprecated +=
	* smd-client, syncmaildir.lua:
	  - generate as suggested action for internal errors:
	    gnome-open "mailto:...."
	* smd-server:
	  - do not es.execute(touch), use io.open instead
	* syncmaildir.lua:
	  - place fifo for mddiff in HOME/.smd/fifo/ if HOME is set, /tmp
	    otherwise
	  - added upperbound to loop generating a fresh name for the fifo
	* sample-hooks/persistent-ssh:
	  - set +e so that if ssh fails smd-pull/push does not fail too and 
	    generates proper tags
	* Makefile:
	  - fixed upload target, used to overwrite the tarball with the
	    changelog
	  - substitute SMDVERSION, MKFIFO and MKDIR when installing scripts
	  - new test/SUITE target to run only one testsuite
	* README:
	  - added notes about the first synchronization
	* DESIGN:
	  - better doc for mddiff
	* tests.d/:
	  - new tests for hooks logging 
	  - new test for fifo creation (syncmaildir.lua function sha_file)
	  - allow disabling valgrind by exporting the VALGRIND variable
	* Makefile, smd-common, syncmaildir.lua:
	  - remove all explicit mentions of my username on sourceforge
	    or my home directory layout

12/04/2010 - minor fix/speedup release - version 0.9.16 aka 1.0~rc5
	* smd-client:
	  - fixed a little bug preventing copybody to work properly
	    if the target directory was not existing
	* syncmaildir.lua, smd-client:
	  - call mddiff passing a pipe, and use the very same instance
	    every time the sha1 of a file needs to be computed. This improves
	    performances considerably when a large number of files needs to
	    be hashed, for example when two very similar mailboxes are
	    synced for the first time (here, 8x speedup)
	  - implement cp in lua to avoid spawning a new process every
	    time a file is copied/moved. The overhead, for small files,
	    is too high and the pure lua implementation of cp is 10 times
	    faster on small files (but could be way slower for big ones).
	* mddiff:
	  - interface change: only a list of directories or a fifo can
	    be passed as arguments
	  - in case the fifo is passed, mddiff reads file names separated
	    by \n and outputs their sha1 sums
	* smd-pull, smd-push:
	  - report an error if a wrong flag is supplied

23/03/2010 - minor fix release - version 0.9.15 aka 1.0~rc4
	* smd-applet:
	  - the icon used to stay set to warning even after a successful
	    synchronization
	* smd-client, smd-server, syncmaildir:
	  - never use the lua error() function, all errors should generate
	    a meaningful tag, only internal errors raise error and thus
	    are tagged as internal-error by the parachute that also prints
	    a backtrace
	  - always use log_tags_and_fail, that calls error but with
	    the exception {text=....} that is recognized by the parachute
	    so that no backtrace is printed
	  - parse mddiff opcodes with a function that is robust in 
	    face of malformed arguments
	* tests.d/:
	  - new test for database mismatch (indirectly testing correct
	    exception handling) and for malformed mddiff opcodes arguments
	* sample-hooks:
	  - persistent-ssh: exploiting ssh connection sharing capability.
	    This allows to save a little amount of time every synchronization.
	    A single secure connection can be established once, at the very
	    beginning, and then reused for evry subsequent synchronization.
	  - documentation for hooks in markdown format generating hooks.html

12/03/2010 - major feature relase - version 0.9.14 aka too many changes to be rc
	* syncmaildir.lua:
	  - mkdir_p creates always a maildir, if the last path component
	    is in { "new", "tmp", "cur" } (used to do that only if it was
	    "tmp".
	* smd-common:
	  - major refactoring, almost all code is inside functions
	  - new function run_hooks
	* smd-pull, smd-push:
	  - adapt to the new smd-common interface: call by hand init
	    functions instead of having them executed by side effect of
	    sourcing smd-common
	* hooks support in smd-push and smd-pull:
	  - executables contained in the .smd/hooks/{pre,post}-{pull,push}.d/
	    directories are executed pre/post the pull/push process.
	  - hooks receive as argument:
	    - when: pre/post
	    - what: push/pull
	    - endpoint: the endpoint name (usually default)
	    - status: the current status, 0 for OK, 1 for error. pre-hooks
	      always receive 0, post hooks receive the value smd-push/pull
	      will return after hooks terminate
	  - thanks to Bart Trojanowsk for the hooks idea
	* sample-hooks/:
	  - new directory with sample hooks, for now just a simple
	    mail-on-failure hook
	* tests.d/:
	  - major redesign of the test framework, allowing multiple
	    test suites
	  - new test suite for smd-pull/push
	  - new test suite for mddiff
	* smd-push/pull smd-client/server mddiff:
	  - support -d --dry-run (i.e. perform no action)
	* manpages for mddiff, smd-client, smd-server, smd-pull, smd-push:
	  - added -d --dry-run doc
	  - mention hooks
	* copyright:
	  - updated years in all files: 2008-2010
	  - added copyright banner where missing
	* git archive:
	  - use git archive for the make dist target
	* README:
	  - mention --dry-run
	  - document hooks

02/03/2010 - major fix release - version 0.9.13
	* smd-server mddiff:
	  - big fat bug solved: the .mtime file was always updated.
	    the .mtime file used to be updated even if the synchronization
	    failed. This could have caused some changes (like in place eader
	    modifications, but not like new messages or renamings/flagging) to
	    be ignored in the following synchronization. Now .mtime works
	    exactly as .db.txt, a .new one is created by mddiff, and is up to
	    smd-server to rename both.
	* mddiff.1.txt:
	  - fixed typo

27/12/2009 - minor fix release - version 0.9.12 aka 1.0rc3
	* DESIGN:
	  - mention the ERROR action that mddiff can now emit
	* smd-client:
	  - understand the ERROR action
	* mddiff.c:
	  - use only EXIT_SUCCESS and EXIT_FAILURE as exit codes
	  - ERROR macro calls exit(EXIT_FAILURE) end emits the
	    ERROR action
	  - new macro WARNING, used for what used to be non
	    fatal errors
	  - improved argument check: stat is done in advance, and
	    we bail out if they are not omogeneous
	* syncmaildir.lua:
	  - handshake function emits 'network' as probable failure
	    cause. Used to emit 'network-error', cheating smd-applet
	* smd-client, smd-server, smd-common:
	  - check for the existence of external helper programs
	    to fail early if it is not the case
	* smd-client, smd-server, syncmaildir.lua:
	  - more comments in the code and better organization
	  - littler refactoring for mkdir_p and tmp_for
	  - added function to check for the existence of an
	    external program using shell type command
	* Makefile:
	  - added abspath/* template to install the software hardcoding
	    absolute paths for helper programs
	* README, DESIGN:
	  - fixed indentation so that markdown displays all
	    blockquotes as such (kudos to Zack).

13/11/2009 - minor fix release - version 0.9.11 aka 1.0rc2 
	* smd-loop:
	  - save pid in lockfile so that lockfile referring
	    to dead instances can be ignored
	  - on receiving SIGTERM, do the cleanup and exit
	  - write log file ~/.smd/log/loop.log
	* smd-push/pull:
	  - save pid in lockfile so that lockfile referring
	    to dead instances can be ignored
	  - print a tagged error message in case an instance is 
	    already running
	* smd-appled:
	  - ported to vala 0.7.8
	  - accept error messages from smd-pushpull (that is used
	    by both smd-push and smd-pull as the tool identifier)
	  - added pause checkbox menu item to pause smd-loop (actually
	    kill and restart)
	  - menu for left and right mouse button differ:
	    - right has preferences, about and quit
	    - left has pause and logs
	  - unrecoverable but non-network related errors are not silently 
	    hidden, a popup shows their possible cause but the application
	    does not enter error handling mode

3/10/2009 - minor fix release - version 0.9.10 
	* smd-loop:
	  - fixed a bug regarding the lock file name, that was clashing
	    with the one of smd-push/pull
	* smd-push/pull:
	  - print the date in the log, not on stdout

27/9/2009 - minor fix release - version 0.9.9 aka 1.0rc1
	* mddiff:
	  - --help and manpage improved
	  - compile with -O2, why not?
	  - add strict compile time dependency over glib >= 2.19.1,
	    that fixes a bug concerning the checksum of data with
	    length < 2
	* smd-push/pull:
	  - when -v is passed also print the date
	* smd-applet:
	  - less noise when a network error occurrs, just notify the user
	    once and change the icon
	  - added manpage
	  - added view log menu item and relative window
	  - made vala 0.7.6 clean
	* smd-loop:
	  - lockfile to not run two instances concurrently
	* Makefile:
	  - sourceforge paths made variable, easier to change and more
	    readable Makefile
	  - added support for @variable@ substitution in installation 
	    phse for SED, SHA1SUM, XDELTA, CPN, SSH, LUA and PREFIX
	  - added template for osx: make osx/FOO will make target FOO
	    with some variables customized for osx
	* README:
	  - added some notes about installation from sources

16/8/2009 - minor fix release
	* mddiff, smd-client:
	  - REPLACE command implemented
	  - tests added
	* smd-applet:
	  - fixed a minor issue with Vala 0.7.5, GLib.Pid is not an int
	    anymore
	  - fixed a major issue with threading, all code regarding gtk is
	    now run by the main thread
	  - fixed a major issue with memory management, from List to
	    Gee.ArrayList, that have non-week references and thus prevent
	    their data from being collected

26/7/2009 - minor bugfix release
	* smd-applet:
	  - when quit was clicked, it was killing every process in
	    its process group, not in the one of its child smd-loop,
	    thus it was killing all other applets started by gnome-applet
	  - configuration window is not pupped up if no config files are
	    found, an error icon and a notification are used instead, and
	    the software wants the configuration files to be available before
	    it actually does something.

26/7/2009 - major feature release
	* smd-applet, eye-candy applet for smd-loop:
	  - attaches to the notification area
	  - stores its configuration using GConf
	  - notifies the user using libnotify
	  - runs smd-loop, interpreting its output
	  - shows the user possible errors and allows him to
	    perform suggested actions by clicking on buttons
	  - complains if smd-loop or smd-push/pull is not configured and
	    forces the user to configure it before starting
	  - automatically run by gnome-session (/etc/xdg/autostart)
	  - shows an item in gnome-control-center
	* smd-loop, cron like push/pull iterator:
	  - use a line based configuration file ~/.smd/loop in the style
	    of cron, calling smd-push/pull with 1 minute granularity
	  - catches some transient errors giving them a second chance;
	    i.e. if the suggested solution is retry, it does so but only 
	    once
	* error report:
	  - smd-client and smd-server output tags describing the 
	    error that caused a sync failure:
	    - context: which part of the software failed, like ssh, 
	      message-deletion, copy-message, ...
	    - probable-cause: something like network, bad file permissions, ...
	    - human-intervention: avoidable or necessary
	    - suggested-actions: run( command ), display-mail, retry, ...
	  - smd-push/smd-pull catch early network errors, so that
	    some tags are output even if smd-client/smd-server is
	    not even run
	* statistics:
	  - smd-client outputs tags describing its last run, comprising
	    the number of added/deleted messages, so that higher level tools
	    can notify the user or collect statistics

28/4/2009 - minor fix and minor feature release
	* support for multiple servers/clients:
	  - config file is now ~/.smd/config.$FOO and smd-push/pull
	    can get an extra argument for FOO, defulat value of FOO is 
	    `default`.
	  - backward-compatibility code added to automatically migrate 
	    the old config file name to the new one
	* cleanup in ~/.smd/:
	  - fifos are now in the fifo/ subdirectory
	  - logs are now in the log/ subdirectory
	* bugfix to mddiff: 
	  - COPYBODY action used to be always followed by an ADD action,
	    that was unnecessary (but not dangerous either).
	* better error reporting:
	  - syncmaildir.lua improved to better report some errors

21/4/2009 - minor fix and minor feature release
	* track only mailmessages (skip other stuff like dovecott indexes):
	  - scans only files in cur/ and new/
	* add COPYBODY command to mddiff:
	  - mails that are moved around and then flagged by MUA
	    are not deteceted anymore as new messages, only the new header
	    is transmitted
	  - smd-client honors the command
	* smd-client better reports network errors:
	  - if no data at all is readable from stdin, it means that
	    the transport (ssh) is not working and this is reported to
	    the user as such

19/4/2009 - major bugfix release
	* major bugfix: 
	  - the db file must be in sync too to grant all changes are detected
	  - the mtime has not to be the same on client and server (thus
	    has to be removed from the db file)
	  - adopt xdelta to calculate a patch for the db file (should be
	    better than diff and can scale to binary, compressed, db file)
	* new client/server protocol: 
	  - allows the server to ABORT
	  - handshake checking protocol version and dbfile hash
	  - at the end transmit and apply the xdelta patch
	* db file format changed:
	  - no more mtime column
	  - added db.txt.mtime auxiliary file to stores a global timestamp 
	    for the whole db
	* minor bugfixes in the code (mostly better error reporting)
	* more documentation

12/4/2009 - first public release
	* end-user tools: smd-pull, smd-push
	* stupid endpoint: smd-server
	* endpoint implementing politics: smd-client
	* low-level tool: mddiff
