diff options
| -rw-r--r-- | pm.lua | 74 | 
1 files changed, 52 insertions, 22 deletions
| @@ -6,44 +6,74 @@ local function perr(err,what)  	if err then error(what..": "..err) end  end +local _manifests = {}  local function manifest(pkgname) +	if _manifests[pkgname] then return _manifests[pkgname] end  	print("fetching manifest of '"..pkgname.."'...") -	local res,err = http.get(rbase..pkgname..".dat") -	perr(err,"http.get") +  	local files={}  	local files_present=false  	local deps={} -	for line in res.readAll():gmatch"[^\n]+" do -		local op,argstart = line:match "^(%w+)%s+()" -		if op then -			local argstr = line:sub(argstart) -			local args = {} -			for arg in argstr:gmatch"[^ ]+" do -				table.insert(args,arg) -			end -			 -			if op == "dep" then -				for _,arg in ipairs(args) do deps[arg]=true end -			elseif op == "file" then -				files_present = true -				for _,arg in ipairs(args) do files[arg]=true end + +	local res,err,err_res = http.get(rbase..pkgname..".dat") +	if err then +		if err_res and (err_res.getResponseCode() == 404) then +			print("no manifest for "..pkgname.." found, using defaults") +		else +			error("http.get: "..err) +		end +	else +		for line in res.readAll():gmatch"[^\n]+" do +			local op,argstart = line:match "^(%w+)%s+()" +			if op then +				local argstr = line:sub(argstart) +				local args = {} +				for arg in argstr:gmatch"[^ ]+" do +					table.insert(args,arg) +				end +				 +				if op == "dep" then +					for _,arg in ipairs(args) do deps[arg]=true end +				elseif op == "file" then +					files_present = true +					for _,arg in ipairs(args) do files[arg]=true end +				end  			end  		end  	end -	if not files_present then files[pkgname]=true end -	return {files=files,deps=deps} +	 +	if not files_present then files[pkgname..".lua"]=true end +	local man = {files=files,deps=deps} +	_manifests[pkgname] = man +	return man  end +local function recursive_depsof(pkgname) +	local lookedat = {} +	local deps = {} +	local function F(pkgname) +		print("F",pkgname) +		if not lookedat[pkgname] then +			lookedat[pkgname] = true +			for k,_ in pairs(manifest(pkgname).deps) do +				deps[k] = true +				F(k) +			end +		end +	end +	F(pkgname) +	return deps +end -local function dl(filename) -	local file,err=fs.open("/"..filename..".lua","w") +local function dlfile(filename) +	local file,err=fs.open("/"..filename,"w")  	if err then error("fs.open "..err) end -	local res,err = http.get("https://g.gh0.pw/ccprogs/plain/"..filename..".lua") +	local res,err = http.get("https://g.gh0.pw/ccprogs/plain/"..filename)  	if err then error("http.get "..err) end  	file.write(res.readAll())  	file.flush()  	file.close()  end -return manifest +return {manifest=manifest,rd=recursive_depsof}  --dl(arg[1]) | 
