From 550c47f8ef464a4abe4f8a85171f9a1f75acee8a Mon Sep 17 00:00:00 2001 From: Axel Kittenberger Date: Sat, 13 Nov 2010 13:44:51 +0000 Subject: [PATCH] --- examples/lbash.lua | 39 ++++++---------------------- lsyncd.lua | 65 ++++++++++++++++++++++++++-------------------- 2 files changed, 45 insertions(+), 59 deletions(-) diff --git a/examples/lbash.lua b/examples/lbash.lua index e8da8d9..8056b56 100644 --- a/examples/lbash.lua +++ b/examples/lbash.lua @@ -21,39 +21,16 @@ bash = { maxProcesses = 3, - onStartup = function(event) - log("Normal", "cp -r from ", event.source, " -> ", event.target) - spawnShell(event, - [[if [ "$(ls -A $1)" ]; then cp -r "$1"* "$2"; fi]], - event.source, event.target) - end, + onStartup = + [[if [ "$(ls -A $1)" ]; then cp -r ^source* ^target; fi]], - onCreate = function(event) - local s = event.sourcePathname - local t = event.targetPathname - log("Normal", "Spawning Create ", s," -> ",t) - spawnShell(event, prefix..[[cp -r "$1" "$2"]], s, t) - end, + onCreate = prefix..[[cp -r ^sourcePathname ^targetPathname]], + + onModify = prefix..[[cp -r ^sourcePathname ^targetPathname]], + + onDelete = prefix..[[rm -rf ^targetPathname]], - onModify = function(event) - local s = event.sourcePathname - local t = event.targetPathname - log("Normal", "Spawning Modify ",s," -> ",t) - spawnShell(event, prefix..[[cp -r "$1" "$2"]], s, t) - end, - - onDelete = function(event) - local t = event.targetPathname - log("Normal", "Spawning Delete of ",t) - spawnShell(event, prefix..[[rm -rf "$1"]], t) - end, - - onMove = function(originEvent, destinationEvent) - local t = originEvent.targetPathname - local d = destinationEvent.targetPathname - log("Normal", "Spawning Move from ",t," to ",d) - spawnShell(originEvent, prefix..[[mv "$1" "$2"]], t, d) - end, + onMove = prefix..[[mv ^o.targetPathname ^d.targetPathname]], } sync{bash, source="src", target="dst/"} diff --git a/lsyncd.lua b/lsyncd.lua index c23564a..4995fe8 100644 --- a/lsyncd.lua +++ b/lsyncd.lua @@ -563,7 +563,7 @@ local Inlet, InletControl = (function() event.etype) return end - delay.sync:removeDelay(delay) + sync:removeDelay(delay) end ----- @@ -622,17 +622,18 @@ local Inlet, InletControl = (function() -- public interface. -- this one is split, one for user one for runner. return { + createBlanketEvent = createBlanketEvent, + discardEvent = discardEvent, getEvent = getEvent, getEvents = getEvents, getConfig = getConfig, - createBlanketEvent = createBlanketEvent, }, { - setSync = setSync, - getSync = getSync, - getDelay = getDelay, - getDelayList = getDelayList, d2e = d2e, dl2el = dl2el, + getDelay = getDelay, + getDelayList = getDelayList, + getSync = getSync, + setSync = setSync, } end)() @@ -1314,12 +1315,12 @@ local Inotifies = (function() } end)() - ------ -- Writes functions for the user for layer 3 configuration. -- local functionWriter = (function() + ----- -- all variables for layer 3 transVars = { { "%^pathname", "event.pathname" , 1, }, @@ -1382,7 +1383,7 @@ local functionWriter = (function() -- -- TODO this has a little too much coding blocks. -- - function translateBinary(str) + local function translateBinary(str) -- splits the string local args = splitStr(str) @@ -1449,17 +1450,22 @@ local functionWriter = (function() ----- -- Translates a call using a shell to a lua function -- - function translateShell(str) + local function translateShell(str) local argn = 1 local args = {} local cmd = str + local lc = str -- true if there is a second event local haveEvent2 = false for _, v in ipairs(transVars) do local occur = false cmd = string.gsub(cmd, v[1], - function() occur = true; return '$'..argn end) + function() + occur = true + return '"$'..argn..'"' + end) + lc = string.gsub(lc, v[1], ']]..'..v[2]..'..[[') if occur then argn = argn + 1 table.insert(args, v[2]) @@ -1475,7 +1481,7 @@ local functionWriter = (function() ft = "function(event, event2)\n" end ft = ft .. ' log("Normal", "Event " .. event.etype ..\n' - ft = ft .. " [[ spawns action '" .. str .. '\']])\n' + ft = ft .. " [[ spawns shell '" .. lc .. '\']])\n' ft = ft .. " spawnShell(event, [[" .. cmd .. "]]" for _, v in ipairs(args) do ft = ft .. ",\n " .. v @@ -1486,7 +1492,7 @@ local functionWriter = (function() ----- -- writes a lua function for a layer 3 user script. - function translate(str) + local function translate(str) -- trim spaces str = string.match(str, "^%s*(.-)%s*$") @@ -1496,7 +1502,7 @@ local functionWriter = (function() else ft = translateShell(str) end - log("FWrite","translated ",str," to ",ft) + log("FWrite","translated [[",str,"]] to \n",ft) return ft end @@ -1504,7 +1510,7 @@ local functionWriter = (function() -- public interface -- return {translate = translate} -end() +end)() ---- @@ -1752,6 +1758,23 @@ function runner.initialize() -- from now on use logging as configured instead of stdout/err. lsyncdStatus = "run"; lsyncd.configure("running"); + + local ufuncs = { + "onAttrib", "onCreate", "onDelete", + "onModify", "onMove", "onStartup" + } + + -- translates layer 3 scripts + for _, s in Syncs.iwalk() do + -- checks if any user functions is a layer 3 string. + local config = s.config + for _, fn in ipairs(ufuncs) do + if type(config[fn]) == 'string' then + local ft = functionWriter.translate(config[fn]) + config[fn] = assert(loadstring("return " .. ft))() + end + end + end -- runs through the syncs table filled by user calling directory() for _, s in Syncs.iwalk() do @@ -2068,20 +2091,6 @@ default = { init = function(inlet) local config = inlet.getConfig() -- user functions - local ufuncs = { - "onAttrib", "onCreate", "onDelete", - "onModify", "onMove"} - -- checks if any user functions is a layer 3 string. - for _, fn in ipairs(funcs) do - if type(config[fn]) == 'string' then - local ft = functionWriter.translate(config[fn]) - config[fn] = loadstring("return" .. ft) - end - end - - if not config.action and not config.onAttrib and - not config.onCreate and not config.onModify and - not config.onDelete and not config.onMove -- calls a startup if given by user script. if type(config.onStartup) == "function" then