local mfs=dofile("/lib/mfs.lua") local pkg_url="https://git.osmarks.tk/heavpoot/packages1/raw/branch/master/" local res={} local cache={} function res.set_pkg_url(x) pkg_url=x end function res.get_pkg_url() return pkg_url end function hget(x) local f=http.get(x) if not f then return nil end local i=f.readAll() f.close() return i end function res.pkgmeta(p) local mt=hget(pkg_url..p.."/pkgmeta.ltn") if not mt then error("Package "..p.." does not have a pkgmeta.ltn!") end return textutils.unserialize(mt) end function res.pkginst(p) mt=res.pkgmeta(p) local packinfo=mfs.load(".packinfo") if not packinfo[p] then packinfo[p]={} end packinfo[p].version=mt.version or "0.1.0" mfs.save(".packinfo",packinfo) if mt.files then for i,thing in pairs(mt.files) do mfs.mmkdir("/"..i) for _,v in pairs(thing) do mfs.write("/"..i.."/"..v,hget(pkg_url..p.."/"..i.."/"..v)) end end end end function res.pkguinst(p) mt=res.pkgmeta(p) local packinfo=mfs.load(".packinfo") if not packinfo[p] then return end packinfo[p]=nil mfs.save(".packinfo",packinfo) if mt.files then for i,thing in pairs(mt.files) do for _,v in pairs(thing) do fs.delete("/"..i.."/"..v) end end end end function res.pkginstmulti(pkgs) local tmp={} for i=1,#pkgs do tmp[i]=function() res.pkginst(pkgs[i]) end end parallel.waitForAll(unpack(tmp)) end function res.dependencies(p,toplvl,x) toplvl=toplvl or true if toplvl then cache.vi=mfs.load(".packinfo") end x=x or {} if x[p]~=nil then return end local mt=res.pkgmeta(p) if cache.vi[p] then if mt.version==cache.vi[p].version then x[p]=0 return end end x[p]=1 for _,v in pairs(mt.dependencies)do if type(v)=="string" then res.dependencies(v,false,x) else res.dependencies(v.name,false,x) end end if toplvl then local res={} for i,v in pairs(x) do if v==1 then res[#res+1]=i end end return res end end return res