#!/usr/bin/env lua local chunk, message = loadfile("packages.info"); if not chunk then print("File or syntax error in package description file:"); print(message); return; end local packages = setmetatable({}, { __index = _G }); setfenv(chunk, packages); local success, message = pcall(chunk); if not success then print("Error in package description file:"); print(message); return; end local releases = {}; for line in io.lines("index.lpf") do local name, time = line:match('name = "([^%"]+)".-released = (%d+),'); releases[name] = time; end local feed = io.open("index.lpf", "w+") or error("Unable to open index.lpf for writing"); function GetMD5(name) local md5 = io.popen("md5sum "..name..".lpkg"); if not md5 then return nil; end local md5sum = md5:read("*l"); md5:close(); if md5sum then return md5sum:match("^([a-zA-Z0-9]+)"); end return; end for package, files in pairs(packages) do if type(files) == "table" then assert(files.version and #files.version == 4, package.." has non-standard version. Please use { %d, %d, %d, %d }."); local oldmd5 = GetMD5(package); io.write("Building package "..package.."... "); os.execute(("tar cf %s.lpkg %s --exclude=.svn"):format(package, table.concat(files, " "))); io.write("done.\n"); local newmd5 = GetMD5(package); if oldmd5 and newmd5 ~= oldmd5 then files.released = os.time(); end feed:write(string.format("pkg{ name = %q, version = { %d, %d, %d, %d }, depends = { %s }, released = %d, tags = %q, md5 = %q, path = %q }\n", package, files.version[1], files.version[2], files.version[3], files.version[4], files.depends and ("'"..table.concat(files.depends or {}, "', '").."'") or "", files.released or releases[package] or os.time(), files.tags or "", newmd5, (packages._rooturl or "/lpkg/")..package..".lpkg")); end end feed:close(); os.execute("md5sum *.lpkg > packages.md5");