aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/luarocks/cmd/unpack.tl (renamed from src/luarocks/cmd/unpack.lua)39
1 files changed, 21 insertions, 18 deletions
diff --git a/src/luarocks/cmd/unpack.lua b/src/luarocks/cmd/unpack.tl
index a0ade4f3..0e168785 100644
--- a/src/luarocks/cmd/unpack.lua
+++ b/src/luarocks/cmd/unpack.tl
@@ -1,7 +1,8 @@
1 1
2--- Module implementing the LuaRocks "unpack" command. 2--- Module implementing the LuaRocks "unpack" command.
3-- Unpack the contents of a rock. 3-- Unpack the contents of a rock.
4local unpack = {} 4local record unpack
5end
5 6
6local fetch = require("luarocks.fetch") 7local fetch = require("luarocks.fetch")
7local fs = require("luarocks.fs") 8local fs = require("luarocks.fs")
@@ -10,7 +11,13 @@ local build = require("luarocks.build")
10local dir = require("luarocks.dir") 11local dir = require("luarocks.dir")
11local search = require("luarocks.search") 12local search = require("luarocks.search")
12 13
13function unpack.add_to_parser(parser) 14local type Parser = require("luarocks.vendor.argparse").Parser
15
16local type Args = require("luarocks.core.types.args").Args
17
18local type Rockspec = require("luarocks.core.types.rockspec").Rockspec
19
20function unpack.add_to_parser(parser: Parser)
14 local cmd = parser:command("unpack", [[ 21 local cmd = parser:command("unpack", [[
15Unpacks the contents of a rock in a newly created directory. 22Unpacks the contents of a rock in a newly created directory.
16Argument may be a rock file, or the name of a rock in a rocks server. 23Argument may be a rock file, or the name of a rock in a rocks server.
@@ -34,9 +41,7 @@ end
34-- @param dir_name string: The directory where to store and unpack files. 41-- @param dir_name string: The directory where to store and unpack files.
35-- @return table or (nil, string): the loaded rockspec table or 42-- @return table or (nil, string): the loaded rockspec table or
36-- nil and an error message. 43-- nil and an error message.
37local function unpack_rockspec(rockspec_file, dir_name) 44local function unpack_rockspec(rockspec_file: string, dir_name: string): Rockspec, string
38 assert(type(rockspec_file) == "string")
39 assert(type(dir_name) == "string")
40 45
41 local rockspec, err = fetch.load_rockspec(rockspec_file) 46 local rockspec, err = fetch.load_rockspec(rockspec_file)
42 if not rockspec then 47 if not rockspec then
@@ -44,8 +49,8 @@ local function unpack_rockspec(rockspec_file, dir_name)
44 end 49 end
45 local ok, err = fs.change_dir(dir_name) 50 local ok, err = fs.change_dir(dir_name)
46 if not ok then return nil, err end 51 if not ok then return nil, err end
47 local ok, sources_dir = fetch.fetch_sources(rockspec, true, ".") 52 local filename, sources_dir = fetch.fetch_sources(rockspec, true, ".")
48 if not ok then 53 if not filename then
49 return nil, sources_dir 54 return nil, sources_dir
50 end 55 end
51 ok, err = fs.change_dir(sources_dir) 56 ok, err = fs.change_dir(sources_dir)
@@ -63,12 +68,11 @@ end
63-- extension in the rock filename (eg. "src", "all", "linux-x86") 68-- extension in the rock filename (eg. "src", "all", "linux-x86")
64-- @return table or (nil, string): the loaded rockspec table or 69-- @return table or (nil, string): the loaded rockspec table or
65-- nil and an error message. 70-- nil and an error message.
66local function unpack_rock(rock_file, dir_name, kind) 71local function unpack_rock(rock_file: string, dir_name: string, kind: string): Rockspec, string, string
67 assert(type(rock_file) == "string")
68 assert(type(dir_name) == "string")
69 72
70 local ok, err, errcode = fetch.fetch_and_unpack_rock(rock_file, dir_name) 73 local ok, filename, err, errcode: boolean, string, string, string
71 if not ok then 74 filename, err, errcode = fetch.fetch_and_unpack_rock(rock_file, dir_name)
75 if not filename then
72 return nil, err, errcode 76 return nil, err, errcode
73 end 77 end
74 ok, err = fs.change_dir(dir_name) 78 ok, err = fs.change_dir(dir_name)
@@ -80,7 +84,7 @@ local function unpack_rock(rock_file, dir_name, kind)
80 end 84 end
81 if kind == "src" then 85 if kind == "src" then
82 if rockspec.source.file then 86 if rockspec.source.file then
83 local ok, err = fs.unpack_archive(rockspec.source.file) 87 ok, err = fs.unpack_archive(rockspec.source.file)
84 if not ok then return nil, err end 88 if not ok then return nil, err end
85 ok, err = fetch.find_rockspec_source_dir(rockspec, ".") 89 ok, err = fetch.find_rockspec_source_dir(rockspec, ".")
86 if not ok then return nil, err end 90 if not ok then return nil, err end
@@ -100,8 +104,7 @@ end
100-- @param file string: A rockspec or .rock URL. 104-- @param file string: A rockspec or .rock URL.
101-- @return boolean or (nil, string): true if successful or nil followed 105-- @return boolean or (nil, string): true if successful or nil followed
102-- by an error message. 106-- by an error message.
103local function run_unpacker(file, force) 107local function run_unpacker(file: string, force: boolean): boolean, string
104 assert(type(file) == "string")
105 108
106 local base_name = dir.base_name(file) 109 local base_name = dir.base_name(file)
107 local dir_name, kind, extension = base_name:match("(.*)%.([^.]+)%.(rock)$") 110 local dir_name, kind, extension = base_name:match("(.*)%.([^.]+)%.(rock)$")
@@ -123,7 +126,7 @@ local function run_unpacker(file, force)
123 end 126 end
124 local rollback = util.schedule_function(fs.delete, fs.absolute_name(dir_name)) 127 local rollback = util.schedule_function(fs.delete, fs.absolute_name(dir_name))
125 128
126 local rockspec, err 129 local rockspec, err: Rockspec, string
127 if extension == "rock" then 130 if extension == "rock" then
128 rockspec, err = unpack_rock(file, dir_name, kind) 131 rockspec, err = unpack_rock(file, dir_name, kind)
129 elseif extension == "rockspec" then 132 elseif extension == "rockspec" then
@@ -152,8 +155,8 @@ end
152--- Driver function for the "unpack" command. 155--- Driver function for the "unpack" command.
153-- @return boolean or (nil, string): true if successful or nil followed 156-- @return boolean or (nil, string): true if successful or nil followed
154-- by an error message. 157-- by an error message.
155function unpack.command(args) 158function unpack.command(args: Args): boolean, string
156 local url, err 159 local url, err: string, string
157 if args.rock:match(".*%.rock") or args.rock:match(".*%.rockspec") then 160 if args.rock:match(".*%.rock") or args.rock:match(".*%.rockspec") then
158 url = args.rock 161 url = args.rock
159 else 162 else