42 lines
977 B
Lua
42 lines
977 B
Lua
module(..., package.seeall)
|
|
|
|
local native = require "tundra.native"
|
|
|
|
-- Stash of all dir walks performed for signature generation.
|
|
local query_records = {}
|
|
|
|
function walk(path, filter_callback)
|
|
|
|
local dir_stack = { path }
|
|
local paths_out = {}
|
|
|
|
while #dir_stack > 0 do
|
|
local dir = dir_stack[#dir_stack]
|
|
table.remove(dir_stack)
|
|
|
|
local subdirs, files = native.list_directory(dir)
|
|
query_records[dir] = { Files = files, SubDirs = subdirs }
|
|
|
|
for _, subdir in ipairs(subdirs) do
|
|
full_dir_path = dir .. SEP .. subdir
|
|
if not filter_callback or filter_callback(subdir) then
|
|
table.insert(dir_stack, full_dir_path)
|
|
end
|
|
end
|
|
|
|
for _, file in ipairs(files) do
|
|
table.insert(paths_out, dir .. SEP .. file)
|
|
end
|
|
end
|
|
|
|
return paths_out
|
|
end
|
|
|
|
function all_queries()
|
|
local result = {}
|
|
for k, v in pairs(query_records) do
|
|
result[#result + 1] = { Path = k, Files = v.Files, SubDirs = v.SubDirs }
|
|
end
|
|
return result
|
|
end
|