--TODO: implement -Syu --IMPORTANT, THIS IS THE PACKAGE DATABASE local ENCDATA ="ENCIOK/59bd0e8e27b9d34a05b997064728082a/raw/database.json" --check if the user is stupid if #arg == 0 then print("error: no operation specified (use encpac -h for help)") return end --open the package DB local ENCfile = fs.open("packagedb/ENCdb", "r") if ENCfile then ENC = ENCfile.readAll() ENC = textutils.unserialiseJSON(ENC) ENCfile.close() else if arg[1] ~= "-Sy" then print("WARNING didn't find package database") end end local function download(address) local answer, err = http.get("https://gist.githubusercontent.com/".. address) if not err then local data = answer.readAll() answer.close() return data end printError(err) return "poopoo" end local function refresh() print("synchronizing package database..") print("ENC") fs.delete("packagedb/ENCdb") local file = fs.open("packagedb/ENCdb", "w") local data = download(ENCDATA) if data == "poopoo" then return end file.write(data) file.close() print("done!") end --getting all depends for package local function checkDepends(pacName, installList) if ENC[pacName] then if not installList[pacName] then installList[pacName] = true end if ENC[pacName].depends then for _, v in ipairs(ENC[pacName].depends) do checkDepends(v, installList) end else return end else printError("can't find package:", pacName) return "poopoo" end end local function synchronize(pacName, path) path = path or "" --get depends print("checking dependencies\n..") local packsToInstall = {} if checkDepends(pacName, packsToInstall) == "poopoo" then return end print("no problems found, about to install the following:\n") for v, _ in pairs(packsToInstall) do io.write(v.." ") end print() io.write("\nProceed with installation? [Y/n] ") local inp = io.read() if inp == "" or inp == "Y" or inp == "y" then print("installing:..") else return end for v, _ in pairs(packsToInstall) do print(v) local data = download(ENC[v].url) if data == "poopoo" then return end local file = fs.open(path .. "/" .. ENC[v].install, "w") file.write(data) file.close() end print("done!") end --lookup table for arguments local argtable = { ["-S"] = synchronize, ["-Sl"] = function(a) synchronize(arg[3], a) end, ["-Sy"] = refresh, ["-h"] = function() end } if argtable[arg[1]] then argtable[arg[1]](arg[2]) else printError("error: invalid option", arg[1]) end