diff --git a/lsyncd.lua b/lsyncd.lua index ee1ffe0..effef87 100644 --- a/lsyncd.lua +++ b/lsyncd.lua @@ -1011,7 +1011,7 @@ local Excludes = (function() -- this was a ** before p = string.gsub(p, "%[%^/%]%*%[%^/%]%*", ".*") p = string.gsub(p, "^/", "^/") - if p.byte(1) ~= 47 then -- does not begin with "/" + if p:sub(1,2) ~= "^/" then -- does not begin with "^/" -- all matches should begin with "/". p = "/" .. p; end diff --git a/tests/exclude.lua b/tests/exclude.lua new file mode 100755 index 0000000..b4a9c69 --- /dev/null +++ b/tests/exclude.lua @@ -0,0 +1,110 @@ +#!/usr/bin/lua +require("posix") +dofile("tests/testlib.lua") + +cwriteln("****************************************************************") +cwriteln(" Testing excludes ") +cwriteln("****************************************************************") + +local tdir, srcdir, trgdir = mktemps() +local logfile = tdir .. "log" +local cfgfile = tdir .. "config.lua" +local range = 5 +local log = {"-log", "all"} + +writefile(cfgfile, [[ +settings = { + .logfile = "]]..logfile..[[", + .nodaemon = true, + .delay = 3, +} + +rsync { + defaults.rsync, + source = "]]..srcdir..[[", + target = "]]..trgdir..[[", + exclude = { + "erf, + "/eaf", + "erd/", + "/ead", + } +}]]); + +-- writes all files +local function writefiles() + posix.mkdir(srcdir .. "d"); + writefile(srcdir .. "erf", "erf"); + writefile(srcdir .. "eaf", "erf"); + writefile(srcdir .. "erd", "erd"); + writefile(srcdir .. "ead", "ead"); + writefile(srcdir .. "d/erf", "erf"); + writefile(srcdir .. "d/eaf", "erf"); + writefile(srcdir .. "d/erd", "erd"); + writefile(srcdir .. "d/ead", "ead"); +end + +-- test if the filename exists, fails if this is different to expect +local function testfile(filename, expect) + local stat, err = posix.stat(filename) + if stat and not expect then + cwriteln("failure: " .. filename " .. should be excluded"); + os.exit(1); + end + if not stat and expect then + cwriteln("failure: " .. filename " .. should not be excluded"); + os.exit(1); + end +end + +-- test all files +local function testfiles() + testfile(srcdir .. "erf", false); + testfile(srcdir .. "eaf", false); + testfile(srcdir .. "erd", true); + testfile(srcdir .. "ead", true); + testfile(srcdir .. "d/erf", false); + testfile(srcdir .. "d/eaf", true); + testfile(srcdir .. "d/erd", true); + testfile(srcdir .. "d/ead", true); +end + + +cwriteln("testing startup excludes"); +writefiles(); +cwriteln("starting Lsyncd"); +local pid = spawn("./lsyncd"); +cwriteln("waiting for Lsyncd to start"); +posix.sleep(3) +cwriteln("testing excludes after startup"); +testfiles(); +cwriteln("ok, removing sources"); +if srcdir:sub(1,4) ~= "/tmp" then + -- just to make sure before rm -rf + cwriteln("exist before drama, srcdir is '", srcdir, "'"); + os.exit(1); +end +os.execute("rm -rf "..srcdir.."/*"); +writeln("waiting for Lsyncd to remove destination"); +if os.execute("diff -urN "..srcdir.." "..trgdir) ~= 0 then + os.exit(1); +end + +posix.sleep(5); +writeln("writing files after startup"); +writefiles(); +writeln("waiting for Lsyncd to transmit changes"); +posix.sleep(5); +testfiles(); + +writeln("killing started Lsyncd"); +posix.kill(pid); +local _, exitmsg, lexitcode = posix.wait(lpid); +cwriteln("Exitcode of Lsyncd = ", exitmsg, " ", lexitcode); +posix.sleep(1); +if lexitcode == 0 then + cwriteln("OK"); +end +os.exit(lexitcode); + +-- TODO remove temp diff --git a/tests/l4rsyncdata.lua b/tests/l4rsyncdata.lua index 9f9404f..a1c8144 100755 --- a/tests/l4rsyncdata.lua +++ b/tests/l4rsyncdata.lua @@ -49,6 +49,12 @@ cwriteln("Exitcode of Lsyncd = ", exitmsg, " ", lexitcode) posix.sleep(1) cwriteln("* differences:") -os.execute("diff -urN "..srcdir.." "..trgdir) +exitcode = os.execute("diff -urN "..srcdir.." "..trgdir) +cwriteln("Exitcode of diff = '", exitcode, "'") +if exitcode ~= 0 then + os.exit(1) +else + os.exit(0) +end -- TODO remove temp