diff options
| author | Hisham Muhammad <hisham@gobolinux.org> | 2012-05-20 23:29:07 -0300 |
|---|---|---|
| committer | Hisham Muhammad <hisham@gobolinux.org> | 2012-05-20 23:29:07 -0300 |
| commit | 2f654a1eeb0ea567867149951f9f72ad96070372 (patch) | |
| tree | 7bf17a6ca2576dbe18e9b23fd526c345b98e89e4 /src | |
| parent | d0aa4e236883fc7e118cab32207e8d585a935023 (diff) | |
| download | luarocks-2f654a1eeb0ea567867149951f9f72ad96070372.tar.gz luarocks-2f654a1eeb0ea567867149951f9f72ad96070372.tar.bz2 luarocks-2f654a1eeb0ea567867149951f9f72ad96070372.zip | |
Refactor the download operation so it can be used by other modules.
Diffstat (limited to 'src')
| -rw-r--r-- | src/luarocks/download.lua | 72 |
1 files changed, 38 insertions, 34 deletions
diff --git a/src/luarocks/download.lua b/src/luarocks/download.lua index 268dc113..474e4d39 100644 --- a/src/luarocks/download.lua +++ b/src/luarocks/download.lua | |||
| @@ -18,52 +18,28 @@ help = [[ | |||
| 18 | --arch=<arch> Download rock for a specific architecture. | 18 | --arch=<arch> Download rock for a specific architecture. |
| 19 | ]] | 19 | ]] |
| 20 | 20 | ||
| 21 | local function download(rock_file) | 21 | function download(arch, name, version, all) |
| 22 | local rock = fetch.fetch_url(rock_file) | ||
| 23 | return rock ~= nil | ||
| 24 | end | ||
| 25 | |||
| 26 | --- Driver function for the "download" 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. | ||
| 32 | function 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 | if flags["source"] then | ||
| 43 | query.arch = "src" | ||
| 44 | elseif flags["rockspec"] then | ||
| 45 | query.arch = "rockspec" | ||
| 46 | elseif flags["arch"] then | ||
| 47 | query.arch = flags["arch"] | ||
| 48 | end | ||
| 49 | local results, err | 22 | local results, err |
| 50 | if flags["all"] then | 23 | local query = search.make_query(name, version) |
| 24 | if arch then query.arch = arch end | ||
| 25 | if all then | ||
| 51 | if name == "" then query.exact_name = false end | 26 | if name == "" then query.exact_name = false end |
| 52 | results, err = search.search_repos(query) | 27 | results, err = search.search_repos(query) |
| 53 | else | 28 | else |
| 54 | results, err = search.find_suitable_rock(query) | 29 | results, err = search.find_suitable_rock(query) |
| 55 | end | 30 | end |
| 56 | if type(results) == "string" then | 31 | if type(results) == "string" then |
| 57 | return download(results) | 32 | local file = fetch.fetch_url(results) |
| 33 | return file | ||
| 58 | elseif type(results) == "table" and next(results) then | 34 | elseif type(results) == "table" and next(results) then |
| 59 | if flags["all"] then | 35 | if all then |
| 60 | local all_ok = true | 36 | local all_ok = true |
| 61 | local any_err = "" | 37 | local any_err = "" |
| 62 | for name, result in pairs(results) do | 38 | for name, result in pairs(results) do |
| 63 | for version, versions in pairs(result) do | 39 | for version, versions in pairs(result) do |
| 64 | for _,items in pairs(versions) do | 40 | for _,items in pairs(versions) do |
| 65 | local filename = path.make_url(items.repo, name, version, items.arch) | 41 | local filename = path.make_url(items.repo, name, version, items.arch) |
| 66 | local ok, err = download(filename) | 42 | local ok, err = fetch.fetch_url(filename) |
| 67 | if not ok then | 43 | if not ok then |
| 68 | all_ok = false | 44 | all_ok = false |
| 69 | any_err = any_err .. "\n" .. err | 45 | any_err = any_err .. "\n" .. err |
| @@ -80,7 +56,35 @@ function run(...) | |||
| 80 | search.print_results(results) | 56 | search.print_results(results) |
| 81 | return nil, "Please narrow your query or use --all." | 57 | return nil, "Please narrow your query or use --all." |
| 82 | end | 58 | end |
| 83 | else | ||
| 84 | return nil, "Could not find a result named "..name..(version and " "..version or "").."." | ||
| 85 | end | 59 | end |
| 60 | return nil, "Could not find a result named "..name..(version and " "..version or "").."." | ||
| 61 | end | ||
| 62 | |||
| 63 | --- Driver function for the "download" command. | ||
| 64 | -- @param name string: a rock name. | ||
| 65 | -- @param version string or nil: if the name of a package is given, a | ||
| 66 | -- version may also be passed. | ||
| 67 | -- @return boolean or (nil, string): true if successful or nil followed | ||
| 68 | -- by an error message. | ||
| 69 | function run(...) | ||
| 70 | local flags, name, version = util.parse_flags(...) | ||
| 71 | |||
| 72 | assert(type(version) == "string" or not version) | ||
| 73 | if type(name) ~= "string" and not flags["all"] then | ||
| 74 | return nil, "Argument missing, see help." | ||
| 75 | end | ||
| 76 | if not name then name, version = "", "" end | ||
| 77 | |||
| 78 | local arch | ||
| 79 | |||
| 80 | if flags["source"] then | ||
| 81 | arch = "src" | ||
| 82 | elseif flags["rockspec"] then | ||
| 83 | arch = "rockspec" | ||
| 84 | elseif flags["arch"] then | ||
| 85 | arch = flags["arch"] | ||
| 86 | end | ||
| 87 | |||
| 88 | local dl, err = download(arch, name, version, flags["all"]) | ||
| 89 | return dl and true, err | ||
| 86 | end | 90 | end |
