summaryrefslogtreecommitdiff
path: root/server/src/async
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/async')
-rw-r--r--server/src/async/loadfile.lua4
-rw-r--r--server/src/async/scanfiles.lua74
2 files changed, 44 insertions, 34 deletions
diff --git a/server/src/async/loadfile.lua b/server/src/async/loadfile.lua
index a7838f7f..33851f58 100644
--- a/server/src/async/loadfile.lua
+++ b/server/src/async/loadfile.lua
@@ -2,10 +2,10 @@ require 'utility'
local fs = require 'bee.filesystem'
while true do
- local filename = IN:bpop()
+ local filename, mode = IN:bpop()
local buf = io.load(fs.path(filename))
if buf then
- OUT:push(filename, buf)
+ OUT:push(filename, mode, buf)
end
GC:push(ID, collectgarbage 'count')
end
diff --git a/server/src/async/scanfiles.lua b/server/src/async/scanfiles.lua
index 7932ac31..090e866f 100644
--- a/server/src/async/scanfiles.lua
+++ b/server/src/async/scanfiles.lua
@@ -1,41 +1,51 @@
local args = ...
+require 'utility'
local fs = require 'bee.filesystem'
local glob = require 'glob'
-local root = fs.path(args.root)
-local session = glob.gitignore(args.pattern, args.options)
-session:setInterface('type', function (path)
- local fullpath = root / path
- if not fs.exists(fullpath) then
+local function scan(mode, root, pattern, options)
+ OUT:push('log', 'Scanning:', root:string())
+ OUT:push('log', 'Scan pattern:', table.dump(pattern))
+ OUT:push('log', 'Scan options:', table.dump(options))
+ local session = glob.gitignore(pattern, options)
+ session:setInterface('type', function (path)
+ local fullpath = root / path
+ if not fs.exists(fullpath) then
+ return nil
+ end
+ if fs.is_directory(fullpath) then
+ return 'directory'
+ else
+ return 'file'
+ end
return nil
- end
- if fs.is_directory(fullpath) then
- return 'directory'
- else
- return 'file'
- end
- return nil
-end)
-session:setInterface('list', function (path)
- local fullpath = root / path
- if not fs.exists(fullpath) then
- return nil
- end
- local list = {}
- for child in fullpath:list_directory() do
- list[#list+1] = child:string()
- end
- return list
-end)
+ end)
+ session:setInterface('list', function (path)
+ local fullpath = root / path
+ if not fs.exists(fullpath) then
+ return nil
+ end
+ local list = {}
+ for child in fullpath:list_directory() do
+ list[#list+1] = child:string()
+ end
+ return list
+ end)
+
+ session:scan(function (path)
+ local ok, msg = IN:pop()
+ if ok and msg == 'stop' then
+ OUT:push 'stop'
+ return
+ end
+ OUT:push(mode, fs.absolute(root / path):string())
+ end)
+end
-session:scan(function (path)
- local ok, msg = IN:pop()
- if ok and msg == 'stop' then
- OUT:push 'stop'
- return
- end
- OUT:push('path', fs.absolute(root / path):string())
-end)
+for _, data in ipairs(args) do
+ local root = fs.path(data.root)
+ scan(data.mode, root, data.pattern, data.options)
+end
OUT:push 'ok'