Rosa/rosa.lua

212 lines
7.3 KiB
Lua

#!/usr/bin/lua
local lfs = require("lfs") -- need lfs lib
local json = require("json")
local function get_pkgdir(command)
local pkglist = io.popen(command)
local pkgdir = {}
for line in pkglist:lines() do
line = line:gsub("\n", "")
table.insert(pkgdir, line)
end
pkglist:close()
return pkgdir
end
local function get_string(linestr, desc_tmp)
local file_res = ""
local cont = false
for line in desc_tmp:gmatch("[^\n]+") do
if line == linestr or cont then -- If find %FILES%
cont = true -- start reading
if line:match("^%s*$") or (line:sub(1,1) == "%" and line ~= linestr) then -- find empty line or (start symbol is % and not linestr)
cont = false -- stop reading
elseif cont and line ~= linestr then
file_res = file_res .. line .. "\n"
end
end
end
return file_res
end
local function get_content(pkgdir)
local name_ct, base_ct, version_ct, desc_ct, csize_ct, isize_ct, url_ct, license_ct, arch_ct, builddate_ct, packager_ct, depends_ct, optdepends_ct, makedepends_ct, files_ct = {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}
for i = 1, #pkgdir do
local desc_tm = io.open("data/" .. pkgdir[i] .. "/desc", "r")
local desc_tmp = desc_tm:read("*a")
desc_tm:close()
-- read name --
local desc_res = get_string("%NAME%", desc_tmp)
desc_res = desc_res:gsub("\n", "")
table.insert(name_ct, desc_res)
local desc_res = ""
-- read base --
local desc_res = get_string("%BASE%", desc_tmp)
desc_res = desc_res:gsub("\n", "")
table.insert(base_ct, desc_res)
local desc_res = ""
-- read version --
local desc_res = get_string("%VERSION%", desc_tmp)
desc_res = desc_res:gsub("\n", "")
table.insert(version_ct, desc_res)
local desc_res = ""
-- read desc --
local desc_res = get_string("%DESC%", desc_tmp)
desc_res = desc_res:gsub("\n", "")
table.insert(desc_ct, desc_res)
local desc_res = ""
-- read csize --
local desc_res = get_string("%CSIZE%", desc_tmp)
desc_res = desc_res:gsub("\n", "")
table.insert(csize_ct, desc_res)
local desc_res = ""
-- read isize --
local desc_res = get_string("%ISIZE%", desc_tmp)
desc_res = desc_res:gsub("\n", "")
table.insert(isize_ct, desc_res)
local desc_res = ""
-- read url --
local desc_res = get_string("%URL%", desc_tmp)
desc_res = desc_res:gsub("\n", "")
table.insert(url_ct, desc_res)
local desc_res = ""
-- read license --
local desc_res = get_string("%LICENSE%", desc_tmp)
table.insert(license_ct, desc_res)
local desc_res = ""
-- read arch --
local desc_res = get_string("%ARCH%", desc_tmp)
table.insert(arch_ct, desc_res)
local desc_res = ""
-- read builddate --
local desc_res = get_string("%BUILDDATE%", desc_tmp)
desc_res = desc_res:gsub("\n", "")
table.insert(builddate_ct, desc_res)
local desc_res = ""
-- read packager --
local desc_res = get_string("%PACKAGER%", desc_tmp)
desc_res = desc_res:gsub("\n", "")
table.insert(packager_ct, desc_res)
local desc_res = ""
-- read depends --
local desc_res = get_string("%DEPENDS%", desc_tmp)
table.insert(depends_ct, desc_res)
local desc_res = ""
-- read optdepends --
local desc_res = get_string("%OPTDEPENDS%", desc_tmp)
table.insert(optdepends_ct, desc_res)
local desc_res = ""
-- read makedepends --
local desc_res = get_string("%MAKEDEPENDS%", desc_tmp)
table.insert(makedepends_ct, desc_res)
local desc_res = ""
end
--read desc end--
--read files--
for i = 1, #pkgdir do
local file_tm = io.open("data/" .. pkgdir[i] .. "/files", "r")
local file_tmp = file_tm:read("*a")
file_tm:close()
local file_res = get_string("%FILES%", file_tmp)
table.insert(files_ct, file_res)
end
--read files end--
return name_ct, base_ct, version_ct, desc_ct, csize_ct, isize_ct, url_ct, license_ct, arch_ct, builddate_ct, packager_ct, depends_ct, optdepends_ct, makedepends_ct, files_ct
end
local function write_api(name, func, func_str)
local nname = name:gsub("%s+", "")
lfs.mkdir("/usr/share/lilac/api/" .. nname)
local fn = string.format("/usr/share/lilac/api/%s/%s", nname, func_str)
local apifile = assert(io.open(fn, "w+"), "Error: cannot open file " .. fn)
apifile:write(func or "")
apifile:close()
end
local function gen_api(params)
os.execute("mkdir -p /usr/share/lilac/api")
local param_names = {"name", "base", "version", "desc", "csize", "isize", "url", "license", "arch", "builddate", "packager", "depends", "optdepends", "makedepends", "files"}
for i = 1, #params.name do -- #params.name: length of params.name
-- create a table
local param_table = {}
for _, param_name in ipairs(param_names) do
-- insert para into table
param_table[param_name] = params[param_name][i]
end
-- convert table to json
local param_json = json.encode(param_table)
local file = io.open("/usr/share/lilac/api/" .. params.name[i] .. ".json", "w")
file:write(param_json .. "\n")
file:close()
end
end
local function gen_pkglist(name)
local name_json = json.encode(name)
local file = io.open("/usr/share/lilac/api/pkglist.json", "w")
file:write(name_json .. "\n")
file:close()
end
local function gen_index(params_pkglist)
local combined_params = {}
for i = 1, #params_pkglist.name do
table.insert(combined_params, {
name = params_pkglist.name[i],
version = params_pkglist.version[i],
desc = params_pkglist.desc[i],
builddate = params_pkglist.builddate[i]
})
end
local pkglist_json = json.encode(combined_params)
local file = io.open("/usr/share/lilac/api/index.json", "w")
file:write(pkglist_json .. "\n")
file:close()
end
--main function--
time = os.date("*t")
print(("%02d:%02d:%02d"):format(time.hour, time.min, time.sec))
local mk_dir = os.execute("rm -rf /usr/share/lilac/Rosa/data && mkdir -p /usr/share/lilac/Rosa/data")
if mk_dir then
os.execute("tar xf /usr/share/lilac/Repo/x86_64/bioarchlinux.files -C /usr/share/lilac/Rosa/data/")
end
local pkgdir = get_pkgdir("cd /usr/share/lilac/Rosa/data/ && ls -D")
local name_ct, base_ct, version_ct, desc_ct, csize_ct, isize_ct, url_ct, license_ct, arch_ct, builddate_ct, packager_ct, depends_ct, optdepends_ct, makedepends_ct, files_ct = get_content(pkgdir)
print("Sucess: read finished")
time = os.date("*t")
print(("%02d:%02d:%02d"):format(time.hour, time.min, time.sec))
os.execute("rm -rf /usr/share/lilac/api/*")
local params = {
name = name_ct,
base = base_ct,
version = version_ct,
desc = desc_ct,
csize = csize_ct,
isize = isize_ct,
url = url_ct,
license = license_ct,
arch = arch_ct,
builddate = builddate_ct,
packager = packager_ct,
depends = depends_ct,
optdepends = optdepends_ct,
makedepends = makedepends_ct,
files = files_ct
}
local indexlist = {
name = name_ct,
version = version_ct,
desc = desc_ct,
builddate = builddate_ct
}
gen_api(params)
gen_pkglist(name_ct)
gen_index(indexlist)
print("Sucess: write finished")
time = os.date("*t")
print(("%02d:%02d:%02d"):format(time.hour, time.min, time.sec))