Alloyed / loverocks

LÖVE + Luarocks
Other
87 stars 7 forks source link

deps.run accept dependencies in place of conf #16

Open pablomayobre opened 7 years ago

pablomayobre commented 7 years ago

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)

pablomayobre commented 7 years ago

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