summaryrefslogtreecommitdiff
path: root/pm.lua
blob: 62cfed984765b449b85b41f26eb44c8e0edf77cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
-- 'package manager'

local rbase = "https://g.gh0.pw/ccprogs/plain/"

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 files={}
	local files_present=false
	local deps={}

	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..".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 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)
	if err then error("http.get "..err) end
	file.write(res.readAll())
	file.flush()
	file.close()
end

return {manifest=manifest,rd=recursive_depsof}
--dl(arg[1])