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