diff options
| author | Hisham <hisham@gobolinux.org> | 2016-10-30 15:05:52 -0200 |
|---|---|---|
| committer | Hisham <hisham@gobolinux.org> | 2016-10-30 15:05:52 -0200 |
| commit | a7c10e670c2f682962e28984a43916f40b302b2b (patch) | |
| tree | f2bafcb4bfea3918ce836070e73d66cd2c97625c /src | |
| parent | 079ea1d4fdbd2d49147f9035cf99461f10bb7cd9 (diff) | |
| parent | ba1ba4be6e0ecc6936c49fae38c71e22250ceb65 (diff) | |
| download | luarocks-a7c10e670c2f682962e28984a43916f40b302b2b.tar.gz luarocks-a7c10e670c2f682962e28984a43916f40b302b2b.tar.bz2 luarocks-a7c10e670c2f682962e28984a43916f40b302b2b.zip | |
Merge branch 'master' into luarocks-3
Diffstat (limited to 'src')
| -rw-r--r-- | src/luarocks/build.lua | 8 | ||||
| -rw-r--r-- | src/luarocks/deps.lua | 70 | ||||
| -rw-r--r-- | src/luarocks/install.lua | 3 | ||||
| -rw-r--r-- | src/luarocks/make.lua | 4 | ||||
| -rw-r--r-- | src/luarocks/manif/writer.lua | 43 | ||||
| -rw-r--r-- | src/luarocks/remove.lua | 9 |
6 files changed, 86 insertions, 51 deletions
diff --git a/src/luarocks/build.lua b/src/luarocks/build.lua index f3b054d2..7808bce9 100644 --- a/src/luarocks/build.lua +++ b/src/luarocks/build.lua | |||
| @@ -429,13 +429,13 @@ function build.command(flags, name, version) | |||
| 429 | ok, err = do_build(name, version, deps.get_deps_mode(flags), flags["only-deps"]) | 429 | ok, err = do_build(name, version, deps.get_deps_mode(flags), flags["only-deps"]) |
| 430 | if not ok then return nil, err end | 430 | if not ok then return nil, err end |
| 431 | name, version = ok, err | 431 | name, version = ok, err |
| 432 | if flags["only-deps"] then | 432 | |
| 433 | return name, version | 433 | if (not flags["only-deps"]) and (not flags["keep"]) and not cfg.keep_other_versions then |
| 434 | end | ||
| 435 | if (not flags["keep"]) and not cfg.keep_other_versions then | ||
| 436 | local ok, err = remove.remove_other_versions(name, version, flags["force"], flags["force-fast"]) | 434 | local ok, err = remove.remove_other_versions(name, version, flags["force"], flags["force-fast"]) |
| 437 | if not ok then util.printerr(err) end | 435 | if not ok then util.printerr(err) end |
| 438 | end | 436 | end |
| 437 | |||
| 438 | writer.check_dependencies(nil, deps.get_deps_mode(flags)) | ||
| 439 | return name, version | 439 | return name, version |
| 440 | end | 440 | end |
| 441 | end | 441 | end |
diff --git a/src/luarocks/deps.lua b/src/luarocks/deps.lua index acbf1dd6..d9419ec3 100644 --- a/src/luarocks/deps.lua +++ b/src/luarocks/deps.lua | |||
| @@ -230,6 +230,28 @@ local function rock_status(name, deps_mode, rocks_provided) | |||
| 230 | return installed and installed.." "..installation_type or "not installed" | 230 | return installed and installed.." "..installation_type or "not installed" |
| 231 | end | 231 | end |
| 232 | 232 | ||
| 233 | --- Check depenendencies of a package and report any missing ones. | ||
| 234 | -- @param name string: package name. | ||
| 235 | -- @param version string: package version. | ||
| 236 | -- @param dependencies table: array of dependencies. | ||
| 237 | -- @param deps_mode string: Which trees to check dependencies for: | ||
| 238 | -- "one" for the current default tree, "all" for all trees, | ||
| 239 | -- "order" for all trees with priority >= the current default, "none" for no trees. | ||
| 240 | function deps.report_missing_dependencies(name, version, dependencies, deps_mode) | ||
| 241 | local first_missing_dep = true | ||
| 242 | |||
| 243 | for _, dep in ipairs(dependencies) do | ||
| 244 | if not match_dep(dep, nil, deps_mode) then | ||
| 245 | if first_missing_dep then | ||
| 246 | util.printout(("Missing dependencies for %s %s:"):format(name, version)) | ||
| 247 | first_missing_dep = false | ||
| 248 | end | ||
| 249 | |||
| 250 | util.printout((" %s (%s)"):format(deps.show_dep(dep), rock_status(dep.name, deps_mode))) | ||
| 251 | end | ||
| 252 | end | ||
| 253 | end | ||
| 254 | |||
| 233 | --- Check dependencies of a rock and attempt to install any missing ones. | 255 | --- Check dependencies of a rock and attempt to install any missing ones. |
| 234 | -- Packages are installed using the LuaRocks "install" command. | 256 | -- Packages are installed using the LuaRocks "install" command. |
| 235 | -- Aborts the program if a dependency could not be fulfilled. | 257 | -- Aborts the program if a dependency could not be fulfilled. |
| @@ -270,20 +292,9 @@ function deps.fulfill_dependencies(rockspec, deps_mode) | |||
| 270 | end | 292 | end |
| 271 | end | 293 | end |
| 272 | 294 | ||
| 273 | local first_missing_dep = true | 295 | deps.report_missing_dependencies(rockspec.name, rockspec.version, rockspec.dependencies, deps_mode) |
| 274 | 296 | ||
| 275 | for _, dep in ipairs(rockspec.dependencies) do | 297 | local first_missing_dep = true |
| 276 | if not match_dep(dep, nil, deps_mode, rockspec.rocks_provided) then | ||
| 277 | if first_missing_dep then | ||
| 278 | util.printout(("Missing dependencies for %s %s:"):format(rockspec.name, rockspec.version)) | ||
| 279 | first_missing_dep = false | ||
| 280 | end | ||
| 281 | |||
| 282 | util.printout((" %s (%s)"):format(deps.show_dep(dep), rock_status(dep.name, deps_mode, rockspec.rocks_provided))) | ||
| 283 | end | ||
| 284 | end | ||
| 285 | |||
| 286 | first_missing_dep = true | ||
| 287 | 298 | ||
| 288 | for _, dep in ipairs(rockspec.dependencies) do | 299 | for _, dep in ipairs(rockspec.dependencies) do |
| 289 | if not match_dep(dep, nil, deps_mode, rockspec.rocks_provided) then | 300 | if not match_dep(dep, nil, deps_mode, rockspec.rocks_provided) then |
| @@ -505,17 +516,15 @@ function deps.check_external_deps(rockspec, mode) | |||
| 505 | return true | 516 | return true |
| 506 | end | 517 | end |
| 507 | 518 | ||
| 508 | --- Recursively scan dependencies, to build a transitive closure of all | 519 | --- Recursively add satisfied dependencies of a package to a table, |
| 509 | -- dependent packages. | 520 | -- to build a transitive closure of all dependent packages. |
| 510 | -- @param results table: The results table being built. | 521 | -- Additionally ensures that `dependencies` table of the manifest is up-to-date. |
| 511 | -- @param missing table: The table of missing dependencies being recursively built. | 522 | -- @param results table: The results table being built, maps package names to versions. |
| 512 | -- @param manifest table: The manifest table containing dependencies. | 523 | -- @param manifest table: The manifest table containing dependencies. |
| 513 | -- @param name string: Package name. | 524 | -- @param name string: Package name. |
| 514 | -- @param version string: Package version. | 525 | -- @param version string: Package version. |
| 515 | -- @return (table, table): The results and a table of missing dependencies. | 526 | function deps.scan_deps(results, manifest, name, version, deps_mode) |
| 516 | function deps.scan_deps(results, missing, manifest, name, version, deps_mode) | ||
| 517 | assert(type(results) == "table") | 527 | assert(type(results) == "table") |
| 518 | assert(type(missing) == "table") | ||
| 519 | assert(type(manifest) == "table") | 528 | assert(type(manifest) == "table") |
| 520 | assert(type(name) == "string") | 529 | assert(type(name) == "string") |
| 521 | assert(type(version) == "string") | 530 | assert(type(version) == "string") |
| @@ -523,7 +532,7 @@ function deps.scan_deps(results, missing, manifest, name, version, deps_mode) | |||
| 523 | local fetch = require("luarocks.fetch") | 532 | local fetch = require("luarocks.fetch") |
| 524 | 533 | ||
| 525 | if results[name] then | 534 | if results[name] then |
| 526 | return results, missing | 535 | return |
| 527 | end | 536 | end |
| 528 | if not manifest.dependencies then manifest.dependencies = {} end | 537 | if not manifest.dependencies then manifest.dependencies = {} end |
| 529 | local dependencies = manifest.dependencies | 538 | local dependencies = manifest.dependencies |
| @@ -533,9 +542,9 @@ function deps.scan_deps(results, missing, manifest, name, version, deps_mode) | |||
| 533 | local rockspec, err | 542 | local rockspec, err |
| 534 | if not deplist then | 543 | if not deplist then |
| 535 | rockspec, err = fetch.load_local_rockspec(path.rockspec_file(name, version), false) | 544 | rockspec, err = fetch.load_local_rockspec(path.rockspec_file(name, version), false) |
| 536 | if err then | 545 | if not rockspec then |
| 537 | missing[name.." "..version] = err | 546 | util.printerr("Couldn't load rockspec for "..name.." "..version..": "..err) |
| 538 | return results, missing | 547 | return |
| 539 | end | 548 | end |
| 540 | dependencies_name[version] = rockspec.dependencies | 549 | dependencies_name[version] = rockspec.dependencies |
| 541 | else | 550 | else |
| @@ -544,18 +553,11 @@ function deps.scan_deps(results, missing, manifest, name, version, deps_mode) | |||
| 544 | rocks_provided = setmetatable({}, { __index = cfg.rocks_provided_3_0 }) | 553 | rocks_provided = setmetatable({}, { __index = cfg.rocks_provided_3_0 }) |
| 545 | } | 554 | } |
| 546 | end | 555 | end |
| 547 | local matched, failures = deps.match_deps(rockspec, nil, deps_mode) | 556 | local matched = deps.match_deps(rockspec, nil, deps_mode) |
| 548 | results[name] = results | 557 | results[name] = version |
| 549 | for _, match in pairs(matched) do | 558 | for _, match in pairs(matched) do |
| 550 | results, missing = deps.scan_deps(results, missing, manifest, match.name, match.version, deps_mode) | 559 | deps.scan_deps(results, manifest, match.name, match.version, deps_mode) |
| 551 | end | 560 | end |
| 552 | if next(failures) then | ||
| 553 | for _, failure in pairs(failures) do | ||
| 554 | missing[deps.show_dep(failure)] = "failed" | ||
| 555 | end | ||
| 556 | end | ||
| 557 | results[name] = version | ||
| 558 | return results, missing | ||
| 559 | end | 561 | end |
| 560 | 562 | ||
| 561 | local valid_deps_modes = { | 563 | local valid_deps_modes = { |
diff --git a/src/luarocks/install.lua b/src/luarocks/install.lua index c9b085f5..3a33fcae 100644 --- a/src/luarocks/install.lua +++ b/src/luarocks/install.lua | |||
| @@ -164,10 +164,13 @@ function install.command(flags, name, version) | |||
| 164 | end | 164 | end |
| 165 | if not ok then return nil, err end | 165 | if not ok then return nil, err end |
| 166 | name, version = ok, err | 166 | name, version = ok, err |
| 167 | |||
| 167 | if (not flags["only-deps"]) and (not flags["keep"]) and not cfg.keep_other_versions then | 168 | if (not flags["only-deps"]) and (not flags["keep"]) and not cfg.keep_other_versions then |
| 168 | local ok, err = remove.remove_other_versions(name, version, flags["force"], flags["force-fast"]) | 169 | local ok, err = remove.remove_other_versions(name, version, flags["force"], flags["force-fast"]) |
| 169 | if not ok then util.printerr(err) end | 170 | if not ok then util.printerr(err) end |
| 170 | end | 171 | end |
| 172 | |||
| 173 | writer.check_dependencies(nil, deps.get_deps_mode(flags)) | ||
| 171 | return name, version | 174 | return name, version |
| 172 | else | 175 | else |
| 173 | local search = require("luarocks.search") | 176 | local search = require("luarocks.search") |
diff --git a/src/luarocks/make.lua b/src/luarocks/make.lua index eb38bff0..d3d02814 100644 --- a/src/luarocks/make.lua +++ b/src/luarocks/make.lua | |||
| @@ -13,6 +13,7 @@ local fetch = require("luarocks.fetch") | |||
| 13 | local pack = require("luarocks.pack") | 13 | local pack = require("luarocks.pack") |
| 14 | local remove = require("luarocks.remove") | 14 | local remove = require("luarocks.remove") |
| 15 | local deps = require("luarocks.deps") | 15 | local deps = require("luarocks.deps") |
| 16 | local writer = require("luarocks.manif.writer") | ||
| 16 | 17 | ||
| 17 | make.help_summary = "Compile package in current directory using a rockspec." | 18 | make.help_summary = "Compile package in current directory using a rockspec." |
| 18 | make.help_arguments = "[--pack-binary-rock] [<rockspec>]" | 19 | make.help_arguments = "[--pack-binary-rock] [<rockspec>]" |
| @@ -75,10 +76,13 @@ function make.command(flags, rockspec) | |||
| 75 | ok, err = build.build_rockspec(rockspec, false, true, deps.get_deps_mode(flags)) | 76 | ok, err = build.build_rockspec(rockspec, false, true, deps.get_deps_mode(flags)) |
| 76 | if not ok then return nil, err end | 77 | if not ok then return nil, err end |
| 77 | local name, version = ok, err | 78 | local name, version = ok, err |
| 79 | |||
| 78 | if (not flags["keep"]) and not cfg.keep_other_versions then | 80 | if (not flags["keep"]) and not cfg.keep_other_versions then |
| 79 | local ok, err = remove.remove_other_versions(name, version, flags["force"], flags["force-fast"]) | 81 | local ok, err = remove.remove_other_versions(name, version, flags["force"], flags["force-fast"]) |
| 80 | if not ok then util.printerr(err) end | 82 | if not ok then util.printerr(err) end |
| 81 | end | 83 | end |
| 84 | |||
| 85 | writer.check_dependencies(nil, deps.get_deps_mode(flags)) | ||
| 82 | return name, version | 86 | return name, version |
| 83 | end | 87 | end |
| 84 | end | 88 | end |
diff --git a/src/luarocks/manif/writer.lua b/src/luarocks/manif/writer.lua index daa6b005..cf35f38d 100644 --- a/src/luarocks/manif/writer.lua +++ b/src/luarocks/manif/writer.lua | |||
| @@ -82,21 +82,11 @@ local function update_dependencies(manifest, deps_mode) | |||
| 82 | 82 | ||
| 83 | for pkg, versions in pairs(manifest.repository) do | 83 | for pkg, versions in pairs(manifest.repository) do |
| 84 | for version, repositories in pairs(versions) do | 84 | for version, repositories in pairs(versions) do |
| 85 | local current = pkg.." "..version | ||
| 86 | for _, repo in ipairs(repositories) do | 85 | for _, repo in ipairs(repositories) do |
| 87 | if repo.arch == "installed" then | 86 | if repo.arch == "installed" then |
| 88 | local missing | 87 | repo.dependencies = {} |
| 89 | repo.dependencies, missing = deps.scan_deps({}, {}, manifest, pkg, version, deps_mode) | 88 | deps.scan_deps(repo.dependencies, {}, manifest, pkg, version, deps_mode) |
| 90 | repo.dependencies[pkg] = nil | 89 | repo.dependencies[pkg] = nil |
| 91 | if missing then | ||
| 92 | for miss, err in pairs(missing) do | ||
| 93 | if miss == current then | ||
| 94 | util.printerr("Tree inconsistency detected: "..current.." has no rockspec. "..err) | ||
| 95 | elseif deps_mode ~= "none" then | ||
| 96 | util.printerr("Missing dependency for "..pkg.." "..version..": "..miss) | ||
| 97 | end | ||
| 98 | end | ||
| 99 | end | ||
| 100 | end | 90 | end |
| 101 | end | 91 | end |
| 102 | end | 92 | end |
| @@ -414,4 +404,33 @@ function writer.remove_from_manifest(name, version, repo, deps_mode) | |||
| 414 | return save_table(rocks_dir, "manifest", manifest) | 404 | return save_table(rocks_dir, "manifest", manifest) |
| 415 | end | 405 | end |
| 416 | 406 | ||
| 407 | --- Report missing dependencies for all rocks installed in a repository. | ||
| 408 | -- @param repo string or nil: Pathname of a local repository. If not given, | ||
| 409 | -- the default local repository is used. | ||
| 410 | -- @param deps_mode string: Dependency mode: "one" for the current default tree, | ||
| 411 | -- "all" for all trees, "order" for all trees with priority >= the current default, | ||
| 412 | -- "none" for using the default dependency mode from the configuration. | ||
| 413 | function writer.check_dependencies(repo, deps_mode) | ||
| 414 | local rocks_dir = path.rocks_dir(repo or cfg.root_dir) | ||
| 415 | assert(type(deps_mode) == "string") | ||
| 416 | if deps_mode == "none" then deps_mode = cfg.deps_mode end | ||
| 417 | |||
| 418 | local manifest = manif.load_local_manifest(rocks_dir) | ||
| 419 | if not manifest then | ||
| 420 | return | ||
| 421 | end | ||
| 422 | |||
| 423 | for name, versions in util.sortedpairs(manifest.repository) do | ||
| 424 | for version, version_entries in util.sortedpairs(versions, deps.compare_versions) do | ||
| 425 | for _, entry in ipairs(version_entries) do | ||
| 426 | if entry.arch == "installed" then | ||
| 427 | if manifest.dependencies[name] and manifest.dependencies[name][version] then | ||
| 428 | deps.report_missing_dependencies(name, version, manifest.dependencies[name][version], deps_mode) | ||
| 429 | end | ||
| 430 | end | ||
| 431 | end | ||
| 432 | end | ||
| 433 | end | ||
| 434 | end | ||
| 435 | |||
| 417 | return writer | 436 | return writer |
diff --git a/src/luarocks/remove.lua b/src/luarocks/remove.lua index e7f37604..08b5bd5e 100644 --- a/src/luarocks/remove.lua +++ b/src/luarocks/remove.lua | |||
| @@ -11,6 +11,7 @@ local path = require("luarocks.path") | |||
| 11 | local util = require("luarocks.util") | 11 | local util = require("luarocks.util") |
| 12 | local cfg = require("luarocks.core.cfg") | 12 | local cfg = require("luarocks.core.cfg") |
| 13 | local fs = require("luarocks.fs") | 13 | local fs = require("luarocks.fs") |
| 14 | local writer = require("luarocks.manif.writer") | ||
| 14 | 15 | ||
| 15 | remove.help_summary = "Uninstall a rock." | 16 | remove.help_summary = "Uninstall a rock." |
| 16 | remove.help_arguments = "[--force|--force-fast] <name> [<version>]" | 17 | remove.help_arguments = "[--force|--force-fast] <name> [<version>]" |
| @@ -159,7 +160,13 @@ function remove.command(flags, name, version) | |||
| 159 | return nil, "Could not find rock '"..name..(version and " "..version or "").."' in "..path.rocks_tree_to_string(cfg.root_dir) | 160 | return nil, "Could not find rock '"..name..(version and " "..version or "").."' in "..path.rocks_tree_to_string(cfg.root_dir) |
| 160 | end | 161 | end |
| 161 | 162 | ||
| 162 | return remove.remove_search_results(results, name, deps_mode, flags["force"], flags["force-fast"]) | 163 | local ok, err = remove.remove_search_results(results, name, deps_mode, flags["force"], flags["force-fast"]) |
| 164 | if not ok then | ||
| 165 | return nil, err | ||
| 166 | end | ||
| 167 | |||
| 168 | writer.check_dependencies(nil, deps.get_deps_mode(flags)) | ||
| 169 | return true | ||
| 163 | end | 170 | end |
| 164 | 171 | ||
| 165 | return remove | 172 | return remove |
