diff --git a/installer.lua b/ccmsi.lua similarity index 89% rename from installer.lua rename to ccmsi.lua index accacd0..96ff5a9 100644 --- a/installer.lua +++ b/ccmsi.lua @@ -22,7 +22,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. local function println(message) print(tostring(message)) end local function print(message) term.write(tostring(message)) end -local VERSION = "v0.7" +local VERSION = "v0.8" local install_dir = "/.install-cache" local repo_path = "http://raw.githubusercontent.com/MikaylaFischler/cc-mek-scada/devel/" @@ -63,8 +63,9 @@ println("-- CC Mekanism SCADA Installer " .. VERSION .. " --") if #opts == 0 or opts[1] == "help" or #opts ~= 2 then println("note: only modifies files that are part of the device application") - println("usage: installer ") + println("usage: ccmsi ") println("") + println(" check - check latest versions avilable") println(" install - fresh install, overwrites config") println(" update - update files EXCEPT for config/logs") println(" remove - delete files EXCEPT for config/logs") @@ -106,7 +107,7 @@ end -- run selected mode -- -if mode == "install" or mode == "update" then +if mode == "check" then ------------------------- -- GET REMOTE MANIFEST -- ------------------------- @@ -122,7 +123,9 @@ if mode == "install" or mode == "update" then local ok, manifest = pcall(function () return textutils.unserializeJSON(response.readAll()) end) if not ok then + term.setTextColor(colors.red) println("error parsing remote installation manifest") + term.setTextColor(colors.white) return end @@ -139,6 +142,64 @@ if mode == "install" or mode == "update" then imfile.close() end + if not local_ok then + term.setTextColor(colors.yellow) + println("warning: failed to load local installation information") + term.setTextColor(colors.white) + end + + for key, value in pairs(manifest.versions) do + term.setTextColor(colors.white) + print("[" .. key .. "]" ) + term.setTextColor(colors.blue) + print(value) + term.setTextColor(colors.lightGray) + if local_manifest.versions[key] ~= nil then + print(" (current ") + term.setTextColor(colors.blue) + print(value) + term.setTextColor(colors.white) + println(")") + else + println(" (not installed)") + end + end +elseif mode == "install" or mode == "update" then + ------------------------- + -- GET REMOTE MANIFEST -- + ------------------------- + + local response, error = http.get(install_manifest) + + if response == nil then + term.setTextColor(colors.red) + println("failed to get installation manifest from GitHub, cannot update or install") + println("http error " .. error) + term.setTextColor(colors.white) + return + end + + local ok, manifest = pcall(function () return textutils.unserializeJSON(response.readAll()) end) + + if not ok then + term.setTextColor(colors.red) + println("error parsing remote installation manifest") + term.setTextColor(colors.white) + end + + ------------------------ + -- GET LOCAL MANIFEST -- + ------------------------ + + local imfile = fs.open("install_manifest.json", "r") + local local_ok = false + local local_manifest = {} + + if imfile ~= nil then + local_ok, local_manifest = pcall(function () return textutils.unserializeJSON(imfile.readAll()) end) + imfile.close() + end + local local_app_version = nil local local_comms_version = nil local local_boot_version = nil @@ -457,7 +518,7 @@ elseif mode == "remove" or mode == "purge" then -- delete log file if purging if mode == "purge" then - local config = require(config_file) + local config = require(app .. ".config") if fs.exists(config.LOG_PATH) then fs.delete(config.LOG_PATH) println("deleted log file " .. config.LOG_PATH)