-- Copyright (c) 2007 by Richard Levitte <richard@levitte.org> -- All rights reserved. -- -- Redistribution and use in source and binary forms, with or without -- modification, are permitted provided that the following conditions -- are met: -- -- 1. Redistributions of source code must retain the above copyright -- notice, this list of conditions and the following disclaimer. -- -- 2. Redistributions in binary form must reproduce the above copyright -- notice, this list of conditions and the following disclaimer in the -- documentation and/or other materials provided with the distribution. -- -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -- ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------- -- Usage: -- -- NOTE: THIS SOFTWARE IS ONLY MEANT FOR SERVER PROCESSES! -- Anything else will fail miserably! -- -- This hook is useful for any system that has a FAM system in -- place, such as incrond and gamin. It simply touches a flag -- file, that can then be used to detect when scripts such as -- monotone-mirror.sh should be executed. -- -- in your server's monotonerc, add the following include: -- -- include("/PATH/TO/monotone-inotify.lua") -- -- You may want to change the following variables: -- -- MI_flagfile -- The absolute path for a file that will simply -- be touched by the note_netsync_end hook. -- Default: CONFDIR/monotone-netsync-end.flag -- -- WARNING! Do not try to store anything in that -- file, it will get erased... ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- Variables ------------------------------------------------------------------------------- MI_default_flagfile = get_confdir() .. "/monotone-netsync-end.flag" MI_default_debug = false if not MI_flagfile then MI_flagfile = MI_default_flagfile end if not MI_debug then MI_debug = MI_default_debug end ------------------------------------------------------------------------------- -- Local hack of the note_netsync_* functions ------------------------------------------------------------------------------- push_hook_functions( { ["end"] = function (nonce, status, bytes_in, bytes_out, certs_in, certs_out, revs_in, revs_out, keys_in, keys_out, ...) if MI_debug then io.stderr:write("note_netsync_end: ", string.format("%d certs, %d revs, %d keys", certs_in, revs_in, keys_in), "\n") end if certs_in > 0 or revs_in > 0 or keys_in > 0 then if MI_debug then io.stderr:write("note_netsync_end: touching ", MI_flagfile, "\n") end local handle = io.open(MI_flagfile, "w+") io.close(handle) end return "continue",nil end })