2022-11-17: 2.3.1 change: multiple bugfixes, style fixes 2022-03-09: 2.3.0 add: nix flake support add: support for tunnel commands add: support for batchSizeLimit add: -onepass option add: crontab support change: support relative executable paths 2018-03-09: 2.2.3 enhaencement: supporting includes with new filter and filterFrom options change: needing now at least Lua 5.2 (Lua 5.1 no longer supported, Lua5.3 supported) change: if the target/targetdir ends with a ':' do not append a trailing '/' to it, since that would change it from homedir to rootdir! add: example for Amazon S3 Bucket (Daniel Miranda) fix: setting stdout/stderr to linebuffer mode. fix: Lua5.3 compatiblity, using load() instead of loadstring() fix: cmake lua detection, will resort to "lua" and "luac" binaries only if more specific suffixes (e.g. luac5.3) are not available fix: test suit, Lua5.3 compatibility (table.unpack) 2017-02-16: 2.2.2 fix: checkgauge 'insist' fix: no partial path exlusion tests fix: write pid of forked process in pidfile fix: crash on not reachable target workaround: changed back to filter style rsync calling until https://bugzilla.samba.org/show_bug.cgi?id=12569 is fixed and released. 2017-01-05: 2.2.1 enhancement: now always using filter lists with rysnc instead of include/exclude lists taking advantage of the new --delete-missing-args parameter to delete files on target. >>> Thus Lsyncd 2.2.1 needs rsync >= 3.1.0 change: added "tests" make target to run all the tests. fix: crash due to typo in changed ^path, ^pathdir, ^pathname 2017-01-04: 2.2.0 enhancement: add rsync options: "append", "append_verify", "backup", "backup_dir", "chmod", "chown", "copy_dirlinks", "existing", "groupmap", "omit_dir_times", "omit_link_times", "suffix," "usermap", enhancement: settings{ } now checks for unknown entries and errors if so. change: Level3 scripts ^path,^pathdir and ^pathname now don't start with a slash. change: Lsyncd now writes a startup log message before daemonizing does in case logging fails, it is recognized before it cannot message anything about it, since it deamonized change: compatible with Lua5.3 (along with 5.1 and 5.2) change: _verbatim forced for 'exitcodes' entry. change: manpage is not rebuild by default. it is provided precompiled. change: faulty/deprecated config files that use settings = { ... }, with equal sign are no longer worked around. change: default.direct now calls copy with -p fix: potential race conditions: default.rsyncssh will now channel deletes also through rsync and treats moves as blocking events. fix: ']' is not escaped for rsync rules, since rsync only applies doesn't applie pattern matching if no other pattern chars are found. fix: Shell injection hole close for default.direct on mv commands. (Marcin Szewczyk) fix: Crash of default-direct when source doesn't exit (Michael Ploujnikov) fix: fixed faulty event replacement, a race condition noticed by extensive default.rsyncssh testing changed Delays were not reflected in Events 2015-10-15: 2.1.6 enhancement: Lsyncd now locks its pidfile enhancement: added ssh.identifyFile and ssh.options options enhancement: added rsync inplace option fix: ignore blank lines and rsync commenits in exclude files (David Reiss) fix: don't tread exclude lines with embedded "+" chars as inclusions (David Reiss) fix: crash when debugging inotify (Michael Ploujnikov) fix: fixed Finished/Retrying error messages being swapped around (Jun Saito) fix: properly encapsulate filenames on ssh mv commands to avoid shell command injections. fix: postcmd example (Timo Teräs) change: closes also on INT signals change: now removes its pidfile on INT and TERM signals change: changed build system from autotools to cmake 2013-06-07: 2.1.5 enhancement: Added rsync options: bwlimit, timeout fix: Specifying ssh port no longer overwrites the last rsync option fix: rsync option password_file is now accepted fix: onAttrib is accepted again fix: -log Exec now prints now fully all arguments fix: configure script lua detection now includes math lib to workaround wrongly created "needs COMPAT_ALL" messages. fix: repaired variable replacement for layer 3 scripts fix: config.delay is now checked to a number >= 0 change: a2x is no longer checked by configure script. should not be needed when building from tarball 2012-11-24: 2.1.4 fix: making ssh custom port changes work with ssh and rsync 2012-11-23: 2.1.3 fix: fixed 2 crash conditions due to failure to read 'uSettings' 2012-11-03: 2.1.2 fix: added excludeFrom to checkgauge (thx to DavidWittman) fix: fixed rsync option computation enhancement: added password_file file option to rsync 2012-10-27: 2.1.1 fix: fix rsync.rsh, rsync.rsync_path, rsync.tmp_dir, rsync._extra parameters thanks go to Birger Schmidt for this fix. 2012-10-23: 2.1.0 fix: fail startup if settings.inist is false and one of the target hosts fails fix: in case of waiting for processes during restart only logs this state now once a minute rather than filling the log crazy about it enhancement: rsyncOpts has been replaced by rsync = {...} parameter lists enhancement: default.rsyncssh has now a ssh = {...} parameter similar to default.rsync to add option to ssh calls. Ditto for xargs = {...} enhancement: the default.* implementations have a checkgauge erroring on any unknown parameters to the sync{} call enhancement: the delete parameter now takes: true, false, 'running' and 'startup' improvement: Dennis Schridde provided various improvements for Lsyncd's autoconf building change: Lsyncd is now Lua 5.2 compatible change: Lsyncd now exits with exitcode 143 on TERM signal change: settings is now be used as call like settings{...} instead of settings = {...} 2012-04-04: 2.0.7 fix: closed a memory leak due to not correct configured weak tables fix: default.direct, do not use on OSX unrecognized option -t on modify fix: default.direct, typo leading to compile error fix: when using settings.inotifyMode = "Modify" events were longer ignored fix: layer 3 function generator was messed up. change: now uses a2x to generate the manpage (thus more compatible across distros) change: removed --with-default-runner since it was broken, and will be replaced by something more generic in future 2012-02-16: 2.0.6 fix: no longer stops syslogging on HUP signals fix: OSX event watcher no longer misses moves into and out of the watch tree fix: not refinding a relative path to the config file in case of HUP. fix: rsync doing error 13 and killing Lsyncd. see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=659941 fix: no event creation during shutdown (might loop before) fix: no logging due to wrong log levels fix: without-inotify compile option now works to compile on OSX fix: in case of HUP-reset imply insist=true, since startup is known to be configured correctly. fix: a series of typos in comments, manpage etc. fix: moves to and from deleted directories (deleted when Lsyncd gets notified) were not correctly translated fix: added --ignore-errors to rsync when deleting files, so it will not miss a delete even when another part of the tree made an IO-error. fix: default.direct now not using -p for mkdir since if the dir is not there it should fail fix: default.direct now not using -t for cp since OSX binutils doesn't understand it fix: some files might have been missed in splitting move events (especially on tests on OSX) change: complain if any "rsyncOps" is given change: splitted the default configurations in their own files. more cleanly seperated from the Lsyncd runner, and highlights it are just Layer 1 configurations that happen to be provided by default. change: Beautified the code, no extra spaces at line end, ' instead of ", supposing 100 char width to view, change: Lsyncd now remembers the absolute path of its config file during HUPs enhancement: Defaults now respect a 'delete=false' flag when set as parameter to sync{} default.rsync: does not add --delete to rsync default.rsyncssh: does not add --delete to rsync, and does not use rm via ssh tunnel default.direct: does not add --delete to startup rsync and does not use rm 2011-08-25: 2.0.5 fix: Lsyncd will now terminate if it inotify watching exceeds its preset limit. fix: rsync error exit code 12 now results in retries. fix: Lsyncd 2.0.5 should now compile better on a bit elder GNU/Linux versions. fix: examples are now installed in the configured document directory. fix: partial transfers during startup are considered ok. Lsyncd will rework the specified files anyway. change: Layer 1 interface init() now receives an "Init" event instead of an inlet. change: builtin Lua code is now loaded via a c-array. Now more portable and correct memory flags are set. change: Lsyncd will now bail on unknown error codes. enhancement: settings.maxProcesses can now be set as a global limit of childprocesses enhancement: Lsyncd will refuse to start when any startup rsync does not work cleanly and returns "again" unless settings.insist or --insist is specified, then Lsyncd will keep retrying until it works. enhancement: option "rsyncBinary" determines which rsync Lsyncd calls. Default is "/usr/bin/rsync" enhancement: fsevents ("inotify for OSX") fixed for Snowleopard. and is available to configure by default. enhancement: settings.inotifyMode: the actualy Modification event Lsyncd reacts to can now be configured. Default is to react on file closing in write mode. enhancement: readdir(path) is available to userscripts, reads the contents of a directory. 2011-03-27: 2.0.4 enhancement: new setting options logident, logfacility fix: moving filenames with spaces through ssh fix: excludes containing chars % $ ( ) . [ ] + - fix: various typos change: api, settings.statusInterval instead of settings.statusIntervall 2011-02-25: 2.0.3 enhancement: new default target --direct using /bin/ binaries to keep to local dirs in sync (and by default not preserving ownership) example: added a new example how to remotely execute a command after each rsync operations fix: possible crash with long rsyncOps table exceeding lua stack. fix: excludes now properly match relative and absolute paths fix: call to nil function when manually adding blanket delays fix: on ReiserFS not delivering proper dir stats and when encountering a symlink, aquire the node stat for the symlink instead from the linked node. change: leave lua apichecking enabled by default. 2011-01-20: 2.0.2 fix: exclude rules not terminated with '/' now match a file or dir named exactly the same not starting with. fix: pass exclude rules to the startup sync fix: when matching exclusion to not add inotify use same partial path than on syncs fix: properly close pipes that needed more than one write. 2011-01-11: 2.0.1 fix: write pidfile after daemonize() fix: fixed weak tables that allowed garbage collector to collect event lists too eraly. improvement: allow multiple arguments as table for rsyncOps change: added OSX fsevents interface, disabled in autoconf by default since still very experimental and limited to OSX 10.5 only. 2010-12-02: 2.0.0 a complete recoding! change: format of command line arguments changed completly. improvement: the config files format is not LUA instead of XML allowing a range from easy configuration up until complete scripts enhancement: difference actions on different kind of events effents are combined logically. enhancement: allow moves to moved on the target (rsyncssh) enhancement: excludes now allow simple file patterns (?, * and **) enhancement: optionally there is now a statusfile improvement: multiple target queues do not interfer with each other improvement: Lsyncd2 will no longer wait for child processes to return the monitor queue is constantly empties as long Lsyncd runs improvement: Lsyncd2 can now retry operations on network failure and queue events up. improvement: There are now several debugging categories that can be turned on individually. change: manpage is now written in asciidoc change: most more complex logic of Lsyncd is now written in Lua. 2010-10-04: 1.39 enhancement: call action for multiple targets simultanously fix: correctly accept from config xml fix: correctly close and free the inotify file descriptor in case of restart due to HUP signal or OVERFLOW condition fix: when delay=0 a bug always called rsync file filter even when in directory mode 2010-09-01: 1.38 enhancement: implemented file filters for singular operations enhancement: added --singular parameter for single file calls fix: fixed --dryrun messages improvement: now restarts on an inotify OVERFLOW message, just like if being kill -HUPed internal: printout the actual binary called when --debug specified 2010-08-05: 1.37 enhancement: react on HUP signals (interpreted as complete restart) enhancement: inotifies are configureable enhancement: --no-startup skips the startup calls fix : fixed delayed blocking handling. improvement: made logging output better readable internal: made all global variables local internal: renamed "tackles" to "delays" internal: removed the need of the "tosync" stack internal: use more pointers instead of indexes 2010-07-11: 1.34 fix: logging segfault on 64bit systems changed: man page location, spellings 2010-06-05: 1.33 fix: exlude file argument passing to rsync fix: allow exlude files specified for individual sources fix/enhancement: exlusions will be compared with extended path files allowing sub dirs to be excluded. enhancement: allow delays and call aggregation 2009-01-05: Release of lsyncd 1.26 fix: segfault on multitargets changed meaning of "version" tag in lsyncd.conf.xml 2008-12-14: Release of lsyncd 1.25 fix: mv dir and cp -r working fix: working with reiserfs enhancement: config files enhancement: multiple targets enhancement: pidfiles optimized: memory usage improved documentation lots of smaller stuff here and there ... Thanks to all contributers! 2007-12-05: Release of lsyncd 1.0