beautifing code

This commit is contained in:
Axel Kittenberger 2012-10-03 18:34:09 +02:00
parent 899077ccd7
commit 2e9c103f55
2 changed files with 307 additions and 236 deletions

View File

@ -23,84 +23,122 @@ if default.rsync then
error('default-rsync already loaded')
end
default.rsync = {
-----
-- Spawns rsync for a list of events
default.rsync = { }
--
-- Spawns rsync for a list of events
--
-- Exlcusions are already handled by not having
-- events for them.
--
default.rsync.action = function( inlet )
--
action = function(inlet)
-- gets all events ready for syncing
--
local elist = inlet.getEvents(
function(event)
return event.etype ~= 'Init' and event.etype ~= 'Blanket'
end
)
-----
-- replaces filter rule by literals
--
local function sub(p)
-- Replaces what rsync would consider filter rules by literals
--
local function sub( p )
if not p then
return
end
return p:gsub('%?', '\\?'):
return p:
gsub('%?', '\\?'):
gsub('%*', '\\*'):
gsub('%[', '\\['):
gsub('%]', '\\]')
end
--
-- Gets the list of paths for the event list
--
-- Deletes create multi match patterns
--
local paths = elist.getPaths(
function(etype, path1, path2)
if string.byte(path1, -1) == 47 and etype == 'Delete' then
return sub(path1)..'***', sub(path2)
function( etype, path1, path2 )
if string.byte( path1, -1 ) == 47 and etype == 'Delete' then
return sub( path1 )..'***', sub( path2 )
else
return sub(path1), sub(path2)
return sub( path1 ), sub( path2 )
end
end)
-- stores all filters with integer index
-- local filterI = inlet.getExcludes()
local filterI = {}
-- stores all filters with path index
local filterP = {}
end
)
-- adds one entry into the filter
-- @param path ... path to add
-- @param leaf ... true if this the original path
-- false if its a parent
local function addToFilter(path)
if filterP[path] then
--
-- stores all filters by integer index
--
local filterI = { }
--
-- Stores all filters with path index
--
local filterP = { }
--
-- Adds one path to the filter
--
local function addToFilter( path )
if filterP[ path ] then
return
end
filterP[path]=true
table.insert(filterI, path)
filterP[ path ] = true
table.insert( filterI, path )
end
-- adds a path to the filter, for rsync this needs
-- to have entries for all steps in the path, so the file
-- d1/d2/d3/f1 needs filters
--
-- Adds a path to the filter.
--
-- Rsync needs to have entries for all steps in the path,
-- so the file for example d1/d2/d3/f1 needs following filters:
-- 'd1/', 'd1/d2/', 'd1/d2/d3/' and 'd1/d2/d3/f1'
for _, path in ipairs(paths) do
--
for _, path in ipairs( paths ) do
if path and path ~= '' then
addToFilter(path)
local pp = string.match(path, '^(.*/)[^/]+/?')
local pp = string.match( path, '^(.*/)[^/]+/?' )
while pp do
addToFilter(pp)
pp = string.match(pp, '^(.*/)[^/]+/?')
end
end
pp = string.match( pp, '^(.*/)[^/]+/?' )
end
local filterS = table.concat(filterI, '\n')
local filter0 = table.concat(filterI, '\000')
log('Normal', 'Calling rsync with filter-list of new/modified files/dirs\n', filterS)
local config = inlet.getConfig()
end
end
local filterS = table.concat( filterI, '\n' )
local filter0 = table.concat( filterI, '\000' )
log(
'Normal',
'Calling rsync with filter-list of new/modified files/dirs\n',
filterS
)
local config = inlet.getConfig( )
local delete = nil
if config.delete then
delete = { '--delete', '--ignore-errors' }
end
spawn(elist, config.rsync.binary,
spawn(
elist,
config.rsync.binary,
'<', filter0,
config.rsync._computed,
'-r',
@ -110,16 +148,19 @@ default.rsync = {
'--include-from=-',
'--exclude=*',
config.source,
config.target)
end,
config.target
)
end
--
-- Spawns the recursive startup sync
--
init = function(event)
-----
-- Spawns the recursive startup sync
--
init = function(event)
local config = event.config
local inlet = event.inlet
local excludes = inlet.getExcludes()
local excludes = inlet.getExcludes( )
local delete = nil
if config.delete then
@ -127,38 +168,71 @@ default.rsync = {
end
if #excludes == 0 then
log('Normal', 'recursive startup rsync: ', config.source, ' -> ', config.target)
spawn(event, config.rsync.binary,
-- start rsync without any excludes
log(
'Normal',
'recursive startup rsync: ',
config.source,
' -> ',
config.target
)
spawn(
event,
config.rsync.binary,
delete,
config.rsync._computed,
'-r',
config.source,
config.target)
config.target
)
else
local exS = table.concat(excludes, '\n')
log('Normal', 'recursive startup rsync: ',config.source,
' -> ',config.target,' excluding\n',exS)
spawn(event, config.rsync.binary,
-- start rsync providing an exclude list
-- on stdin
local exS = table.concat( excludes, '\n' )
log(
'Normal',
'recursive startup rsync: ',
config.source,
' -> ',
config.target,
' excluding\n',
exS
)
spawn(
event,
config.rsync.binary,
'<', exS,
'--exclude-from=-',
delete,
config.rsync._computed,
'-r',
config.source,
config.target)
config.target
)
end
end,
end
--
-- Prepares and checks a syncs configuration on startup.
--
default.rsync.prepare = function( config )
-----
-- Checks the configuration.
--
prepare = function(config)
if not config.target then
error('default.rsync needs "target" configured', 4)
error(
'default.rsync needs "target" configured',
4
)
end
if config.rsyncOps then
error('"rsyncOps" is outdated please use the new rsync = { ... } syntax.', 4)
error(
'"rsyncOps" is outdated please use the new rsync = { ... } syntax.',
4
)
end
if config.rsyncOpts and config.rsync._extra then
@ -173,12 +247,10 @@ default.rsync = {
if config.rsyncOpts then
log(
'Warn',
'"rsyncOpts" is outdated. Please use the new rsync = { ... } syntax."',
event.etype, '"'
'"rsyncOpts" is outdated. Please use the new rsync = { ... } syntax."'
)
config.rsync._extra = config.rsyncOpts
config.rsyncOpts = nil
end
@ -194,16 +266,14 @@ default.rsync = {
if config.rsyncBinary then
log(
'Warn',
'"rsyncBinary" is outdated. Please use the new rsync = { ... } syntax."',
event.etype, '"'
'"rsyncBinary" is outdated. Please use the new rsync = { ... } syntax."'
)
config.rsync.binary = config.rsyncBinary
config.rsyncOpts = nil
end
-- checks if the _computed argument does not exist already
-- checks if the _computed argument exists already
if config.rsync._computed then
error(
'please do not use the internal rsync._computed parameter',
@ -245,35 +315,34 @@ default.rsync = {
if string.sub(config.target, -1) ~= '/' then
config.target = config.target..'/'
end
end,
end
-----
-- rsync uses default collect
----
--
-- rsync uses default collect
--
-----
-- By default do deletes.
--
delete = true,
--
-- By default do deletes.
--
default.rsync.delete = true
-----
-- Calls rsync with this default short opts.
--
rsync = {
--
-- Calls rsync with this default options
--
default.rsync.rsync = {
-- The rsync binary to be called.
binary = '/usr/bin/rsync',
links = true,
times = true,
protectArgs = true
},
-----
-- Exit codes for rsync.
--
exitcodes = default.rsyncExitCodes,
-----
-- Default delay
--
delay = 15,
}
--
-- Exit codes for rsync.
--
default.rsync.exitcodes = default.rsyncExitCodes
--
-- Default delay
--
default.rsync.delay = 15

View File

@ -8,7 +8,9 @@
-- Authors: Axel Kittenberger <axkibe@gmail.com>
--============================================================================
if default then error('default already loaded'); end
if default then
error('default already loaded')
end
default = {
-----