mirror of
https://github.com/Doodle3D/doodle3d-firmware.git
synced 2024-10-02 16:08:38 +02:00
541793715f
Remove module support. Create and lock working directory. Copy original update script as base for new version.
133 lines
3.5 KiB
Lua
Executable File
133 lines
3.5 KiB
Lua
Executable File
#!/usr/bin/env lua
|
|
--#!/usr/bin/env lua -l strict
|
|
|
|
local function ERR(msg) print(msg) end
|
|
|
|
local ok, pl = pcall(require, 'pl.import_into')
|
|
if not ok then
|
|
ERR('This script requires the Penlight library')
|
|
os.exit(1)
|
|
end
|
|
pl = pl()
|
|
|
|
local lfs = require('lfs') -- assume this exists since it's required by penlight as well
|
|
|
|
local D3D_REPO_FIRMWARE_NAME = 'doodle3d-firmware'
|
|
local D3D_REPO_CLIENT_NAME = 'doodle3d-client'
|
|
local D3D_REPO_PRINT3D_NAME = 'print3d'
|
|
|
|
local paths = {}
|
|
|
|
|
|
local function detectOpenWrtRoot()
|
|
local f = io.open('Makefile', 'r')
|
|
local line = f and f:read('*line')
|
|
local rv = (line and line:find('# Makefile for OpenWrt') == 1) and true or false
|
|
|
|
if f then f:close() end
|
|
return rv
|
|
end
|
|
|
|
-- returns uri (file path) of the wifibox feed, nil if not found or nil+msg on error
|
|
-- recognized feed names are 'wifibox' and 'doodle3d' (case-insensitive)
|
|
local function getWifiboxFeedRoot(feedsFile)
|
|
local typ, nam, uri = nil, nil, nil
|
|
local lineNo = 1
|
|
local f = io.open(feedsFile, 'r')
|
|
|
|
if not f then return nil, "could not open '" .. feedsFile .. '"' end
|
|
|
|
for line in f:lines() do
|
|
typ, nam, uri = line:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)$')
|
|
|
|
if not (typ and nam and uri) then
|
|
f:close()
|
|
return uri or nil, "could not parse line " .. feedsFile .. "#" .. lineNo
|
|
end
|
|
|
|
local commented = (typ:find('#') == 1)
|
|
if not commented and (nam:lower() == 'wifibox' or nam:lower() == 'doodle3d') then
|
|
break
|
|
else
|
|
typ, nam, uri = nil, nil, nil
|
|
end
|
|
|
|
lineNo = lineNo + 1
|
|
end
|
|
|
|
if uri and not (typ == 'src-link' or typ == 'src-cpy') then return nil, "d3d feed has wrong type '" .. typ .. "', use 'src-link' or 'src-cpy'" end
|
|
|
|
f:close()
|
|
return uri
|
|
end
|
|
|
|
-- TODO: pass table to functions to fill in? if they all return either true or nil+msg, that could be used for display of ok/msg
|
|
-- returns true on success, false on error, and displays meaningful messages
|
|
--local function runCheck(msg, processFunc)
|
|
-- io.stdout:write(msg .. "... ")
|
|
-- return processFunc(--[[ hmm ]]--)
|
|
--end
|
|
|
|
|
|
|
|
local function main()
|
|
print("Doodle3D release script")
|
|
-- local opts = parseOptions(arg)
|
|
--
|
|
-- if opts['wrt-root'] then changedir(opts['wrt-root']) end
|
|
-- if opts['cache-dir'] then paths.cache = opts['cache-dir'] end
|
|
|
|
|
|
io.stdout:write("Checking if working directory is the OpenWrt root... ")
|
|
local isOpenWrtRoot = detectOpenWrtRoot()
|
|
if isOpenWrtRoot then
|
|
print("ok")
|
|
else
|
|
print("unrecognized directory, try changing directories or using -wrt-root")
|
|
os.exit(1)
|
|
end
|
|
|
|
io.stdout:write("Looking for Doodle3D feed path... ")
|
|
local d3dFeed,msg = getWifiboxFeedRoot('feeds.conf')
|
|
if d3dFeed then
|
|
print("found " .. d3dFeed)
|
|
else
|
|
if msg then print("not found: " .. msg) else print("not found.") end
|
|
os.exit(1)
|
|
end
|
|
|
|
paths.firmware = d3dFeed .. '/' .. D3D_REPO_FIRMWARE_NAME
|
|
paths.client = d3dFeed .. '/' .. D3D_REPO_CLIENT_NAME
|
|
paths.print3d = d3dFeed .. '/' .. D3D_REPO_PRINT3D_NAME
|
|
|
|
-- if empty, try to choose something sensible
|
|
if not paths.cache or paths.cache == '' then
|
|
paths.cache = '/tmp/d3d-release-dir/2ndpath'
|
|
end
|
|
io.stdout:write("Attempting to use " .. paths.cache .. " as cache dir... ")
|
|
local rv,msg = pl.dir.makepath(paths.cache)
|
|
if not rv then
|
|
print("could not create path (" .. msg .. ").")
|
|
os.exit(1)
|
|
end
|
|
|
|
local lock,msg = lfs.lock_dir(paths.cache)
|
|
if not lock then
|
|
print("could not obtain directory lock (" .. msg .. ").")
|
|
os.exit(1)
|
|
else
|
|
print("OK.")
|
|
end
|
|
|
|
|
|
-- ... --
|
|
--fetch index files and if requested also images and packages
|
|
|
|
|
|
lock:free()
|
|
os.exit(0)
|
|
end
|
|
|
|
|
|
main()
|