first pass updater
This commit is contained in:
		
							parent
							
								
									bdb3b39d4c
								
							
						
					
					
						commit
						c262e983d4
					
				
					 2 changed files with 213 additions and 46 deletions
				
			
		|  | @ -1,79 +1,95 @@ | |||
| args = {...} | ||||
| local args = {...} | ||||
| 
 | ||||
| url = "http://lua.gaywine.org" | ||||
| local url = "http://lua.gaywine.org" | ||||
| 
 | ||||
| path = "bin/" | ||||
| local path = "bin/" | ||||
| if not fs.exists(path) then | ||||
|     fs.makeDir(path) | ||||
| end | ||||
| temp = "temp/" | ||||
| local temp = "temp/" | ||||
| if not fs.exists(temp) then | ||||
|     fs.makeDir(temp) | ||||
| end | ||||
| 
 | ||||
| if #args > 0 then | ||||
|     programToInstall = args[1] | ||||
| else | ||||
|     print("usage:") | ||||
|     print("install.lua <project>") | ||||
|     print("install.lua <project> <custom install path>") | ||||
| end | ||||
| if #args > 1 then | ||||
|     print("WARNING: custom paths are currently not supported.") | ||||
|     customPath = shell.resolve(args[2]) | ||||
| end | ||||
| 
 | ||||
| function downloadFile(filename) | ||||
|   fileUrl = url .. "/files/" .. programToInstall .. "/" .. filename | ||||
| local function downloadFile(filename) | ||||
|     print("downloading " .. filename .. "...") | ||||
|     local fileUrl = url .. "/files/" .. programToInstall .. "/" .. filename | ||||
| 
 | ||||
|   result = http.get(fileUrl) | ||||
|   resultText = result.readAll() | ||||
|     local result = http.get(fileUrl) | ||||
|     local resultText = result.readAll() | ||||
| 
 | ||||
|   file = fs.open(temp .. filename, "w") | ||||
|   file.write(resultText) | ||||
|   file.close() | ||||
|     local file = fs.open(temp .. filename, "w") | ||||
|     file.write(resultText) | ||||
|     file.close() | ||||
| end | ||||
| 
 | ||||
| function split(pString, pPattern) | ||||
|    local Table = {}  -- NOTE: use {n = 0} in Lua-5.0 | ||||
|    local fpat = "(.-)" .. pPattern | ||||
|    local last_end = 1 | ||||
|    local s, e, cap = pString:find(fpat, 1) | ||||
|    while s do | ||||
|           if s ~= 1 or cap ~= "" then | ||||
|          table.insert(Table,cap) | ||||
|           end | ||||
|           last_end = e+1 | ||||
|           s, e, cap = pString:find(fpat, last_end) | ||||
|    end | ||||
|    if last_end <= #pString then | ||||
|           cap = pString:sub(last_end) | ||||
|           table.insert(Table, cap) | ||||
|    end | ||||
|    return Table | ||||
| local function split(pString, pPattern) | ||||
|     local Table = {} -- NOTE: use {n = 0} in Lua-5.0 | ||||
|     local fpat = "(.-)" .. pPattern | ||||
|     local last_end = 1 | ||||
|     local s, e, cap = pString:find(fpat, 1) | ||||
|     while s do | ||||
|         if s ~= 1 or cap ~= "" then | ||||
|             table.insert(Table, cap) | ||||
|         end | ||||
|         last_end = e + 1 | ||||
|         s, e, cap = pString:find(fpat, last_end) | ||||
|     end | ||||
|     if last_end <= #pString then | ||||
|         cap = pString:sub(last_end) | ||||
|         table.insert(Table, cap) | ||||
|     end | ||||
|     return Table | ||||
| end | ||||
| 
 | ||||
| function getAllFiles() | ||||
|   indexesUrl = url .. "/indexes/" .. programToInstall | ||||
| local function getAllFiles() | ||||
|     local indexesUrl = url .. "/indexes/" .. programToInstall | ||||
| 
 | ||||
|   result = http.get(indexesUrl) | ||||
|   resultText = result.readAll() | ||||
|   resultTable = split(resultText, "\n") | ||||
|     local result = http.get(indexesUrl) | ||||
|     local resultText = result.readAll() | ||||
|     local resultTable = split(resultText, "\n") | ||||
| 
 | ||||
|   finalResult = {} | ||||
|   for key, value in ipairs(resultTable) do | ||||
|     finalResult[key] = split(value, " ")[1] | ||||
|   end | ||||
|     local indexesFile = fs.open("bin/indexes.dat", "w") | ||||
|     indexesFile.write(resultText) | ||||
|     indexesFile.close() | ||||
| 
 | ||||
|   return finalResult | ||||
|     local programsFile = fs.open(path .. "programs.dat", "a") | ||||
|     programsFile.write(programToInstall) | ||||
|     programsFile.close() | ||||
| 
 | ||||
|     local finalResult = {} | ||||
|     for key, value in ipairs(resultTable) do | ||||
|         finalResult[key] = split(value, " ")[1] | ||||
|     end | ||||
| 
 | ||||
|     return finalResult | ||||
| end | ||||
| 
 | ||||
| function finishInstall(files) | ||||
| local function finishInstall(files) | ||||
|     for key, file in ipairs(files) do | ||||
|         if customPath ~= nil then | ||||
|             print("moving " .. file .. " to " .. customPath .. "...") | ||||
|             fs.move(temp .. file, customPath .. "/" .. file) | ||||
|         else | ||||
|             fs.move(temp .. binary, path .. binary) | ||||
|             print("moving " .. file .. " to " .. path .. programToInstall .. "...") | ||||
|             fs.move(temp .. file, path .. programToInstall .. "/" .. file) | ||||
|         end | ||||
|     end | ||||
| 
 | ||||
|     if customPath ~= nil then | ||||
|         program = "shell.run(" .. customPath .. "/run.lua)" | ||||
|         local program = "shell.run(" .. customPath .. "/run.lua)" | ||||
|         file = fs.open(path .. programToInstall .. "/run.lua") | ||||
|         file.write(program) | ||||
|         file.close() | ||||
|  | @ -82,8 +98,27 @@ function finishInstall(files) | |||
|     fs.delete(temp) | ||||
| end | ||||
| 
 | ||||
| local files = getAllFiles() | ||||
| for _,value in ipairs(files) do | ||||
|   downloadFile(value) | ||||
| if not fs.exists(path .. "programs.dat") then | ||||
|   local file = fs.open(path .. "programs.dat", "w") | ||||
|   file.write("") | ||||
|   file.close() | ||||
| end | ||||
| local programsFile = fs.open(path .. "programs.dat", "r") | ||||
| local programsText = programsFile.readAll() | ||||
| local programsTable = split(programsText, "\n") | ||||
| local shouldInstall = true | ||||
| for _, value in ipairs(programsTable) do | ||||
|     if value == programToInstall then | ||||
|         print(programToInstall .. " is already installed. checking for updates instead...") | ||||
|         shouldInstall = false | ||||
|     end | ||||
| end | ||||
| if shouldInstall then | ||||
|     local files = getAllFiles() | ||||
|     for _, value in ipairs(files) do | ||||
|         downloadFile(value) | ||||
|     end | ||||
|     finishInstall(files) | ||||
| elseif fs.exists(path .. "updater/update.lua") then | ||||
|     shell.run(path .. "updater/update.lua " .. programToInstall) | ||||
| end | ||||
| finishInstall(files) | ||||
|  | @ -1 +1,133 @@ | |||
| print('fuck') | ||||
| args = {...} | ||||
| 
 | ||||
| url = "http://lua.gaywine.org" | ||||
| 
 | ||||
| path = "bin/" | ||||
| if not fs.exists(path) then | ||||
|     fs.makeDir(path) | ||||
| end | ||||
| temp = "temp/" | ||||
| if not fs.exists(temp) then | ||||
|     fs.makeDir(temp) | ||||
| end | ||||
| 
 | ||||
| if #args > 0 then | ||||
|     programToInstall = args[1] | ||||
| end | ||||
| if #args > 1 then | ||||
|     print("WARNING: custom paths are currently not supported.") | ||||
|     customPath = shell.resolve(args[2]) | ||||
| end | ||||
| 
 | ||||
| local function downloadFile(filename) | ||||
|     print("downloading " .. filename .. "...") | ||||
|     local fileUrl = url .. "/files/" .. programToInstall .. "/" .. filename | ||||
| 
 | ||||
|     local result = http.get(fileUrl) | ||||
|     local resultText = result.readAll() | ||||
| 
 | ||||
|     local file = fs.open(temp .. filename, "w") | ||||
|     file.write(resultText) | ||||
|     file.close() | ||||
| end | ||||
| 
 | ||||
| local function split(pString, pPattern) | ||||
|     local Table = {} -- NOTE: use {n = 0} in Lua-5.0 | ||||
|     local fpat = "(.-)" .. pPattern | ||||
|     local last_end = 1 | ||||
|     local s, e, cap = pString:find(fpat, 1) | ||||
|     while s do | ||||
|         if s ~= 1 or cap ~= "" then | ||||
|             table.insert(Table, cap) | ||||
|         end | ||||
|         last_end = e + 1 | ||||
|         s, e, cap = pString:find(fpat, last_end) | ||||
|     end | ||||
|     if last_end <= #pString then | ||||
|         cap = pString:sub(last_end) | ||||
|         table.insert(Table, cap) | ||||
|     end | ||||
|     return Table | ||||
| end | ||||
| 
 | ||||
| local function getAllFiles() | ||||
|     local indexesUrl = url .. "/indexes/" .. programToInstall | ||||
|     local updateUrl = url .. "/updates/" .. programToInstall | ||||
| 
 | ||||
|     local currentFiles = "" | ||||
|     if fs.exists(path .. "indexes.dat") then | ||||
|         local indexesFile = fs.open(path .. "indexes.dat", "r") | ||||
|         currentFiles = indexesFile.readAll() | ||||
|         indexesFile.close() | ||||
|     end | ||||
| 
 | ||||
|     local result = http.post(indexesUrl, currentFiles) | ||||
|     local resultText = result.readAll() | ||||
|     local resultTable = split(resultText, "\n") | ||||
| 
 | ||||
|     local result2 = http.get(indexesUrl) | ||||
|     local resultText2 = result2.readAll() | ||||
|     local resultTable2 = split(resultText2, "\n") | ||||
| 
 | ||||
|     local newIndexesFile = fs.open(path .. "indexes.dat", "w") | ||||
|     newIndexesFile.write(resultText) | ||||
|     newIndexesFile.close() | ||||
| 
 | ||||
|     local finalResult = {} | ||||
|     for key, value in ipairs(resultTable2) do | ||||
|         local filename = split(value, " ")[1] | ||||
|         for key2, value2 in ipairs(resultTable) do | ||||
|             local valueTable = split(value2, " ") | ||||
|             local filePath = path .. programToInstall .. "/" .. valueTable[1] | ||||
|             if valueTable[2] == "delete" and fs.exists(filePath) then | ||||
|                 fs.delete(filePath) | ||||
|             elseif valueTable[2] == "download" then | ||||
|                 finalResult[#finalResult + 1] = valueTable[1] | ||||
|             end | ||||
|         end | ||||
|     end | ||||
| 
 | ||||
|     return finalResult | ||||
| end | ||||
| 
 | ||||
| local function finishInstall(files) | ||||
|     for key, file in ipairs(files) do | ||||
|         if customPath ~= nil then | ||||
|             print("moving " .. file .. " to " .. customPath .. "...") | ||||
|             fs.move(temp .. file, customPath .. "/" .. file) | ||||
|         else | ||||
|             print("moving " .. file .. " to " .. path .. programToInstall .. "...") | ||||
|             fs.move(temp .. file, path .. programToInstall .. "/" .. file) | ||||
|         end | ||||
|     end | ||||
| 
 | ||||
|     if customPath ~= nil then | ||||
|         local program = "shell.run(" .. customPath .. "/run.lua)" | ||||
|         file = fs.open(path .. programToInstall .. "/run.lua") | ||||
|         file.write(program) | ||||
|         file.close() | ||||
|     end | ||||
| 
 | ||||
|     fs.delete(temp) | ||||
| end | ||||
| 
 | ||||
| if programToInstall == nil then | ||||
|     print("no program specified, updating all...") | ||||
|     local programsFile = fs.open(path .. "programs.dat", "r") | ||||
|     local programsText = programsFile.readAll() | ||||
|     local programsTable = split(programsText, "\n") | ||||
|     for _, value in ipairs(programsTable) do | ||||
|         programToInstall = value | ||||
|         local files = getAllFiles() | ||||
|         for _, value in ipairs(files) do | ||||
|             downloadFile(value) | ||||
|         end | ||||
|         finishInstall(files) | ||||
|     end | ||||
| else | ||||
|     local files = getAllFiles() | ||||
|     for _, value in ipairs(files) do | ||||
|         downloadFile(value) | ||||
|     end | ||||
|     finishInstall(files) | ||||
| end | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue