Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement