aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham <hisham@gobolinux.org>2016-09-08 11:28:52 -0300
committerHisham <hisham@gobolinux.org>2016-09-08 11:28:52 -0300
commitc53a3c84000cfeaa5749abe3a5917b55f74c21de (patch)
treee4ef553b88ce0a9b40807271a4225774eb1f5bc5
parent311d2ea373d01a71ad12d31bc250d8e6f6f6c3f8 (diff)
downloadluarocks-c53a3c84000cfeaa5749abe3a5917b55f74c21de.tar.gz
luarocks-c53a3c84000cfeaa5749abe3a5917b55f74c21de.tar.bz2
luarocks-c53a3c84000cfeaa5749abe3a5917b55f74c21de.zip
Make `pack` use the same logic as `show` for finding a rock.
-rw-r--r--src/luarocks/doc.lua4
-rw-r--r--src/luarocks/pack.lua36
-rw-r--r--src/luarocks/search.lua33
-rw-r--r--src/luarocks/show.lua37
4 files changed, 46 insertions, 64 deletions
diff --git a/src/luarocks/doc.lua b/src/luarocks/doc.lua
index ec2b1110..15460b31 100644
--- a/src/luarocks/doc.lua
+++ b/src/luarocks/doc.lua
@@ -5,7 +5,7 @@ local doc = {}
5package.loaded["luarocks.doc"] = doc 5package.loaded["luarocks.doc"] = doc
6 6
7local util = require("luarocks.util") 7local util = require("luarocks.util")
8local show = require("luarocks.show") 8local search = require("luarocks.search")
9local path = require("luarocks.path") 9local path = require("luarocks.path")
10local dir = require("luarocks.dir") 10local dir = require("luarocks.dir")
11local fetch = require("luarocks.fetch") 11local fetch = require("luarocks.fetch")
@@ -63,7 +63,7 @@ function doc.command(flags, name, version)
63 return nil, "Argument missing. "..util.see_help("doc") 63 return nil, "Argument missing. "..util.see_help("doc")
64 end 64 end
65 65
66 local iname, iversion, repo = show.pick_installed_rock(name, version, flags["tree"]) 66 local iname, iversion, repo = search.pick_installed_rock(name, version, flags["tree"])
67 if not iname then 67 if not iname then
68 util.printout(name..(version and " "..version or "").." is not installed. Looking for it in the rocks servers...") 68 util.printout(name..(version and " "..version or "").." is not installed. Looking for it in the rocks servers...")
69 return try_to_open_homepage(name, version) 69 return try_to_open_homepage(name, version)
diff --git a/src/luarocks/pack.lua b/src/luarocks/pack.lua
index 277cf246..fb40a576 100644
--- a/src/luarocks/pack.lua
+++ b/src/luarocks/pack.lua
@@ -85,38 +85,20 @@ end
85 85
86-- @param name string: Name of package to pack. 86-- @param name string: Name of package to pack.
87-- @param version string or nil: A version number may also be passed. 87-- @param version string or nil: A version number may also be passed.
88-- @param tree string or nil: An optional tree to pick the package from.
88-- @return string or (nil, string): The filename of the resulting 89-- @return string or (nil, string): The filename of the resulting
89-- .src.rock file; or nil and an error message. 90-- .src.rock file; or nil and an error message.
90local function do_pack_binary_rock(name, version) 91local function do_pack_binary_rock(name, version, tree)
91 assert(type(name) == "string") 92 assert(type(name) == "string")
92 assert(type(version) == "string" or not version) 93 assert(type(version) == "string" or not version)
93 94
94 local query = search.make_query(name, version) 95 local repo, repo_url
95 query.exact_name = true 96 name, version, repo, repo_url = search.pick_installed_rock(name, version, tree)
96 local results = {} 97 if not name then
97 98 return nil, version
98 search.manifest_search(results, cfg.rocks_dir, query)
99
100 if not next(results) then
101 return nil, "'"..name.."' does not seem to be an installed rock."
102 end
103
104 local versions = results[name]
105
106 if not version then
107 local first = next(versions)
108 if next(versions, first) then
109 return nil, "Please specify which version of '"..name.."' to pack."
110 end
111 version = first
112 end
113 if not version:match("[^-]+%-%d+") then
114 return nil, "Expected version "..version.." in version-revision format."
115 end 99 end
116 100
117 local info = versions[version][1] 101 local root = path.root_dir(repo_url)
118
119 local root = path.root_dir(info.repo)
120 local prefix = path.install_dir(name, version, root) 102 local prefix = path.install_dir(name, version, root)
121 if not fs.exists(prefix) then 103 if not fs.exists(prefix) then
122 return nil, "'"..name.." "..version.."' does not seem to be an installed rock." 104 return nil, "'"..name.." "..version.."' does not seem to be an installed rock."
@@ -202,7 +184,7 @@ function pack.command(flags, arg, version)
202 if arg:match(".*%.rockspec") then 184 if arg:match(".*%.rockspec") then
203 file, err = pack.pack_source_rock(arg) 185 file, err = pack.pack_source_rock(arg)
204 else 186 else
205 file, err = do_pack_binary_rock(arg, version) 187 file, err = do_pack_binary_rock(arg, version, flags["tree"])
206 end 188 end
207 if err then 189 if err then
208 return nil, err 190 return nil, err
diff --git a/src/luarocks/search.lua b/src/luarocks/search.lua
index eaa321d5..d22c2a18 100644
--- a/src/luarocks/search.lua
+++ b/src/luarocks/search.lua
@@ -416,6 +416,39 @@ function search.act_on_src_or_rockspec(action, name, version, ...)
416 return action(url, ...) 416 return action(url, ...)
417end 417end
418 418
419function search.pick_installed_rock(name, version, given_tree)
420 local results = {}
421 local query = search.make_query(name, version)
422 query.exact_name = true
423 local tree_map = {}
424 local trees = cfg.rocks_trees
425 if given_tree then
426 trees = { given_tree }
427 end
428 for _, tree in ipairs(trees) do
429 local rocks_dir = path.rocks_dir(tree)
430 tree_map[rocks_dir] = tree
431 search.manifest_search(results, rocks_dir, query)
432 end
433
434 if not next(results) then --
435 return nil,"cannot find package "..name.." "..(version or "").."\nUse 'list' to find installed rocks."
436 end
437
438 version = nil
439 local repo_url
440 local package, versions = util.sortedpairs(results)()
441 --question: what do we do about multiple versions? This should
442 --give us the latest version on the last repo (which is usually the global one)
443 for vs, repositories in util.sortedpairs(versions, deps.compare_versions) do
444 if not version then version = vs end
445 for _, rp in ipairs(repositories) do repo_url = rp.repo end
446 end
447
448 local repo = tree_map[repo_url]
449 return name, version, repo, repo_url
450end
451
419--- Driver function for "search" command. 452--- Driver function for "search" command.
420-- @param name string: A substring of a rock name to search. 453-- @param name string: A substring of a rock name to search.
421-- @param version string or nil: a version may also be passed. 454-- @param version string or nil: a version may also be passed.
diff --git a/src/luarocks/show.lua b/src/luarocks/show.lua
index 01860e78..88f9512d 100644
--- a/src/luarocks/show.lua
+++ b/src/luarocks/show.lua
@@ -58,45 +58,12 @@ local function format_text(text)
58 return (table.concat(paragraphs, "\n\n"):gsub("%s$", "")) 58 return (table.concat(paragraphs, "\n\n"):gsub("%s$", ""))
59end 59end
60 60
61function show.pick_installed_rock(name, version, tree)
62 local results = {}
63 local query = search.make_query(name, version)
64 query.exact_name = true
65 local tree_map = {}
66 local trees = cfg.rocks_trees
67 if tree then
68 trees = { tree }
69 end
70 for _, tree in ipairs(trees) do
71 local rocks_dir = path.rocks_dir(tree)
72 tree_map[rocks_dir] = tree
73 search.manifest_search(results, rocks_dir, query)
74 end
75
76 if not next(results) then --
77 return nil,"cannot find package "..name.." "..(version or "").."\nUse 'list' to find installed rocks."
78 end
79
80 version = nil
81 local repo_url
82 local package, versions = util.sortedpairs(results)()
83 --question: what do we do about multiple versions? This should
84 --give us the latest version on the last repo (which is usually the global one)
85 for vs, repositories in util.sortedpairs(versions, deps.compare_versions) do
86 if not version then version = vs end
87 for _, rp in ipairs(repositories) do repo_url = rp.repo end
88 end
89
90 local repo = tree_map[repo_url]
91 return name, version, repo, repo_url
92end
93
94local function installed_rock_label(name, tree) 61local function installed_rock_label(name, tree)
95 local installed, version 62 local installed, version
96 if cfg.rocks_provided[name] then 63 if cfg.rocks_provided[name] then
97 installed, version = true, cfg.rocks_provided[name] 64 installed, version = true, cfg.rocks_provided[name]
98 else 65 else
99 installed, version = show.pick_installed_rock(name, nil, tree) 66 installed, version = search.pick_installed_rock(name, nil, tree)
100 end 67 end
101 return installed and "(using "..version..")" or "(missing)" 68 return installed and "(using "..version..")" or "(missing)"
102end 69end
@@ -111,7 +78,7 @@ function show.command(flags, name, version)
111 end 78 end
112 79
113 local repo, repo_url 80 local repo, repo_url
114 name, version, repo, repo_url = show.pick_installed_rock(name, version, flags["tree"]) 81 name, version, repo, repo_url = search.pick_installed_rock(name, version, flags["tree"])
115 if not name then 82 if not name then
116 return nil, version 83 return nil, version
117 end 84 end