Alloyed / loverocks

LÖVE + Luarocks

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

deps.run accept dependencies in place of conf

pablomayobre opened this issue · comments

deps.run could potentially accept a list of dependencies instead of a conf table. This would be as easy as checking if the table is an array containing strings (there is a schema checking library already in this repository).

This would make it easier to use as a library.

deps.run({ -- Dependency List
  "bump ~> 3",   -- install bump.lua version 3
  "dkjson >= 2", -- install a version of dkjson greater than 2.0
  "repler",      -- install any version of repler, including SCM versions
}, { -- Arguments
  name = "package name", -- Currently provided by t.identity
  from = { -- Currently provided by t.rocks_servers
    "http://alloyed.me/shared/rocks" ,
    "http://luarocks.org"
  },
  tree = "my-rocks-folder", -- Currently provided by t.rocks_tree
  --All the other args still apply (ie: server and only-server)
})

Note that this additional arguments are only available through the library and not exposed to the CLI (although name and tree could)

Maybe this could be fixed by adding a base function, ie deps.base which is called by deps.run and can be used without it

local log      = require 'loverocks.log'
local luarocks = require 'loverocks.luarocks'

local deps = {}

function deps.build(parser)
	parser:description
		"Installs all packages listed as dependencies in your conf.lua file."
	parser:option "-s" "--server"
		:description
			"Fetch rocks/rockspecs from this server as a priority."
	parser:option "--only-server"
		:description
			"Fetch rocks/rockspecs from this server, ignoring other servers."
end

function deps.base(dep_list, flags)
	log:fs("luarocks install <> --only-deps")
	log:assert(luarocks.sandbox(flags, function()
		local lr_deps = require 'luarocks.deps'

		local parsed_deps = {}
		for _, s in ipairs(dep_list) do
			table.insert(parsed_deps, lr_deps.parse_dep(s))
		end

		return lr_deps.fulfill_dependencies({
			name = flags.name or 'LOVE_GAME',
			version = "(love)",
			dependencies = parsed_deps
		}, "one")
	end))

	log:info("Dependencies installed succesfully!")
end

function deps.run(conf, args)
	if conf._loverocks_no_config then
		log:error("conf.lua error: %s", conf._loverocks_no_config)
	end
	if not conf.dependencies then
		log:error("please add a dependency table to your conf.lua FIXME: better error")
	end

	local flags = luarocks.make_flags(conf)
	flags.init_rocks = true

	flags.name = conf.identity or "LOVE_GAME"
	assert(type(flags.name) == 'string')

	if args.server then
		table.insert(flags.from, 1, args.server)
	end
	if args.only_server then
		flags.only_from = args.only_server
	end

	deps.base(conf.dependencies, flags)
end

return deps