aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhisham <hisham@9ca3f7c1-7366-0410-b1a3-b5c78f85698c>2009-07-16 21:14:12 +0000
committerhisham <hisham@9ca3f7c1-7366-0410-b1a3-b5c78f85698c>2009-07-16 21:14:12 +0000
commitf1e7565c7a93b213f09216aaa2c50e10df44d187 (patch)
tree6dd969112d29e01494eeb4af832905fbcb754f10 /src
parentba906abeafae6ebc199bb3ed447bc2a31bb9b770 (diff)
downloadluarocks-f1e7565c7a93b213f09216aaa2c50e10df44d187.tar.gz
luarocks-f1e7565c7a93b213f09216aaa2c50e10df44d187.tar.bz2
luarocks-f1e7565c7a93b213f09216aaa2c50e10df44d187.zip
add get_rockspec command
git-svn-id: http://luarocks.org/svn/luarocks/trunk@41 9ca3f7c1-7366-0410-b1a3-b5c78f85698c
Diffstat (limited to 'src')
-rwxr-xr-xsrc/bin/luarocks1
-rw-r--r--src/luarocks/fetch.lua13
-rw-r--r--src/luarocks/get_rockspec.lua81
-rw-r--r--src/luarocks/search.lua2
4 files changed, 94 insertions, 3 deletions
diff --git a/src/bin/luarocks b/src/bin/luarocks
index ae0c2b42..2e2ac422 100755
--- a/src/bin/luarocks
+++ b/src/bin/luarocks
@@ -15,5 +15,6 @@ commands.search = require("luarocks.search")
15commands.list = require("luarocks.list") 15commands.list = require("luarocks.list")
16commands.remove = require("luarocks.remove") 16commands.remove = require("luarocks.remove")
17commands.make = require("luarocks.make") 17commands.make = require("luarocks.make")
18commands.get_rockspec = require("luarocks.get_rockspec")
18 19
19command_line.run_command(...) 20command_line.run_command(...)
diff --git a/src/luarocks/fetch.lua b/src/luarocks/fetch.lua
index 4e17c91d..fc0535a9 100644
--- a/src/luarocks/fetch.lua
+++ b/src/luarocks/fetch.lua
@@ -200,9 +200,11 @@ end
200-- Only the LuaRocks runtime loader should use 200-- Only the LuaRocks runtime loader should use
201-- load_local_rockspec directly. 201-- load_local_rockspec directly.
202-- @param filename string: Local or remote filename of a rockspec. 202-- @param filename string: Local or remote filename of a rockspec.
203-- @param location string or nil: Where to download. If not given,
204-- a temporary dir is created.
203-- @return table or (nil, string, [string]): A table representing the rockspec 205-- @return table or (nil, string, [string]): A table representing the rockspec
204-- or nil followed by an error message and optional error code. 206-- or nil followed by an error message and optional error code.
205function load_rockspec(filename) 207function load_rockspec(filename, location)
206 assert(type(filename) == "string") 208 assert(type(filename) == "string")
207 209
208 local name = dir.base_name(filename):match("(.*)%.rockspec") 210 local name = dir.base_name(filename):match("(.*)%.rockspec")
@@ -210,7 +212,14 @@ function load_rockspec(filename)
210 return nil, "Filename '"..filename.."' does not look like a rockspec." 212 return nil, "Filename '"..filename.."' does not look like a rockspec."
211 end 213 end
212 214
213 local filename, err, errcode = fetch_url_at_temp_dir(filename,"luarocks-rockspec-"..name) 215 local err, errcode
216 if location then
217 fs.change_dir(location)
218 filename, err = fetch_url(filename)
219 fs.pop_dir()
220 else
221 filename, err, errcode = fetch_url_at_temp_dir(filename,"luarocks-rockspec-"..name)
222 end
214 if not filename then 223 if not filename then
215 return nil, err, errcode 224 return nil, err, errcode
216 end 225 end
diff --git a/src/luarocks/get_rockspec.lua b/src/luarocks/get_rockspec.lua
new file mode 100644
index 00000000..77fb6d21
--- /dev/null
+++ b/src/luarocks/get_rockspec.lua
@@ -0,0 +1,81 @@
1
2--- Module implementing the luarocks "get_rockspec" command.
3-- Download a rockspec from the repository.
4module("luarocks.get_rockspec", package.seeall)
5
6local util = require("luarocks.util")
7local path = require("luarocks.path")
8local fetch = require("luarocks.fetch")
9local search = require("luarocks.search")
10
11help_summary = "Download a specific rockspec file from a rocks server."
12help_arguments = "[--all] [<name> [<version>]]"
13
14help = [[
15--all Download multiple rockspec files if there is more than one match.
16]]
17
18local function get_rockspec(rockspec_file)
19 local rockspec = fetch.load_rockspec(rockspec_file, ".")
20 if not rockspec then
21 return nil, "Failed loading rockspec "..rockspec_file
22 end
23 return true
24end
25
26--- Driver function for the "get_rockspec" command.
27-- @param name string: a rock name.
28-- @param version string or nil: if the name of a package is given, a
29-- version may also be passed.
30-- @return boolean or (nil, string): true if successful or nil followed
31-- by an error message.
32function run(...)
33 local flags, name, version = util.parse_flags(...)
34
35 assert(type(version) == "string" or not version)
36 if type(name) ~= "string" and not flags["all"] then
37 return nil, "Argument missing, see help."
38 end
39 if not name then name, version = "", "" end
40
41 local query = search.make_query(name, version)
42 query.arch = "rockspec"
43 local results, err
44 if flags["all"] then
45 if name == "" then query.exact_name = false end
46 results, err = search.search_repos(query)
47 print(results, err)
48 else
49 results, err = search.find_suitable_rock(query)
50 end
51 if type(results) == "string" then
52 return get_rockspec(results)
53 elseif type(results) == "table" and next(results) then
54 if flags["all"] then
55 local all_ok = true
56 local any_err = ""
57 for name, result in pairs(results) do
58 for version, versions in pairs(result) do
59 for _,items in pairs(versions) do
60 local filename = path.make_url(items.repo, name, version, items.arch)
61 local ok, err = get_rockspec(filename)
62 if not ok then
63 all_ok = false
64 any_err = any_err .. "\n" .. err
65 end
66 end
67 end
68 end
69 return all_ok, any_err
70 else
71 print("Multiple search results were returned.")
72 print()
73 print("Search results:")
74 print("---------------")
75 print_results(results)
76 return nil, "Please narrow your query or use --all."
77 end
78 else
79 return nil, "Could not find a result named "..name.."."
80 end
81end
diff --git a/src/luarocks/search.lua b/src/luarocks/search.lua
index 06868810..e31c0c1b 100644
--- a/src/luarocks/search.lua
+++ b/src/luarocks/search.lua
@@ -191,7 +191,7 @@ end
191-- and values are tables matching version strings to an array of 191-- and values are tables matching version strings to an array of
192-- rocks servers; if no results are found, an empty table is returned. 192-- rocks servers; if no results are found, an empty table is returned.
193-- In case of errors, nil and and error message are returned. 193-- In case of errors, nil and and error message are returned.
194local function search_repos(query) 194function search_repos(query)
195 assert(type(query) == "table") 195 assert(type(query) == "table")
196 196
197 local results = {} 197 local results = {}