diff options
| author | V1K1NGbg <victor@ilchev.com> | 2024-07-18 17:54:37 +0300 |
|---|---|---|
| committer | V1K1NGbg <victor@ilchev.com> | 2024-08-05 20:49:17 +0300 |
| commit | e5c279e5ef87ee8ed59a43ca5ea00ce9ecf459f3 (patch) | |
| tree | 6fa18abb45ae0f78e719dc94c3fb02c1b1cf59e5 /src | |
| parent | 0555546ceeebe47899bf755b01f459eff0cebe08 (diff) | |
| download | luarocks-e5c279e5ef87ee8ed59a43ca5ea00ce9ecf459f3.tar.gz luarocks-e5c279e5ef87ee8ed59a43ca5ea00ce9ecf459f3.tar.bz2 luarocks-e5c279e5ef87ee8ed59a43ca5ea00ce9ecf459f3.zip | |
test path
Diffstat (limited to 'src')
| -rw-r--r-- | src/luarocks/path-origianl.lua | 263 | ||||
| -rw-r--r-- | src/luarocks/path.lua | 269 |
2 files changed, 393 insertions, 139 deletions
diff --git a/src/luarocks/path-origianl.lua b/src/luarocks/path-origianl.lua new file mode 100644 index 00000000..19657c83 --- /dev/null +++ b/src/luarocks/path-origianl.lua | |||
| @@ -0,0 +1,263 @@ | |||
| 1 | |||
| 2 | --- LuaRocks-specific path handling functions. | ||
| 3 | -- All paths are configured in this module, making it a single | ||
| 4 | -- point where the layout of the local installation is defined in LuaRocks. | ||
| 5 | local path = {} | ||
| 6 | |||
| 7 | local core = require("luarocks.core.path") | ||
| 8 | local dir = require("luarocks.dir") | ||
| 9 | local cfg = require("luarocks.core.cfg") | ||
| 10 | local util = require("luarocks.util") | ||
| 11 | |||
| 12 | path.rocks_dir = core.rocks_dir | ||
| 13 | path.versioned_name = core.versioned_name | ||
| 14 | path.path_to_module = core.path_to_module | ||
| 15 | path.deploy_lua_dir = core.deploy_lua_dir | ||
| 16 | path.deploy_lib_dir = core.deploy_lib_dir | ||
| 17 | path.map_trees = core.map_trees | ||
| 18 | path.rocks_tree_to_string = core.rocks_tree_to_string | ||
| 19 | |||
| 20 | --- Infer rockspec filename from a rock filename. | ||
| 21 | -- @param rock_name string: Pathname of a rock file. | ||
| 22 | -- @return string: Filename of the rockspec, without path. | ||
| 23 | function path.rockspec_name_from_rock(rock_name) | ||
| 24 | assert(type(rock_name) == "string") | ||
| 25 | local base_name = dir.base_name(rock_name) | ||
| 26 | return base_name:match("(.*)%.[^.]*.rock") .. ".rockspec" | ||
| 27 | end | ||
| 28 | |||
| 29 | function path.root_from_rocks_dir(rocks_dir) | ||
| 30 | assert(type(rocks_dir) == "string") | ||
| 31 | return rocks_dir:match("(.*)" .. util.matchquote(cfg.rocks_subdir) .. ".*$") | ||
| 32 | end | ||
| 33 | |||
| 34 | function path.root_dir(tree) | ||
| 35 | if type(tree) == "string" then | ||
| 36 | return tree | ||
| 37 | else | ||
| 38 | assert(type(tree) == "table") | ||
| 39 | return tree.root | ||
| 40 | end | ||
| 41 | end | ||
| 42 | |||
| 43 | function path.deploy_bin_dir(tree) | ||
| 44 | return dir.path(path.root_dir(tree), "bin") | ||
| 45 | end | ||
| 46 | |||
| 47 | function path.manifest_file(tree) | ||
| 48 | return dir.path(path.rocks_dir(tree), "manifest") | ||
| 49 | end | ||
| 50 | |||
| 51 | --- Get the directory for all versions of a package in a tree. | ||
| 52 | -- @param name string: The package name. | ||
| 53 | -- @return string: The resulting path -- does not guarantee that | ||
| 54 | -- @param tree string or nil: If given, specifies the local tree to use. | ||
| 55 | -- the package (and by extension, the path) exists. | ||
| 56 | function path.versions_dir(name, tree) | ||
| 57 | assert(type(name) == "string" and not name:match("/")) | ||
| 58 | return dir.path(path.rocks_dir(tree), name) | ||
| 59 | end | ||
| 60 | |||
| 61 | --- Get the local installation directory (prefix) for a package. | ||
| 62 | -- @param name string: The package name. | ||
| 63 | -- @param version string: The package version. | ||
| 64 | -- @param tree string or nil: If given, specifies the local tree to use. | ||
| 65 | -- @return string: The resulting path -- does not guarantee that | ||
| 66 | -- the package (and by extension, the path) exists. | ||
| 67 | function path.install_dir(name, version, tree) | ||
| 68 | assert(type(name) == "string" and not name:match("/")) | ||
| 69 | assert(type(version) == "string") | ||
| 70 | return dir.path(path.rocks_dir(tree), name, version) | ||
| 71 | end | ||
| 72 | |||
| 73 | --- Get the local filename of the rockspec of an installed rock. | ||
| 74 | -- @param name string: The package name. | ||
| 75 | -- @param version string: The package version. | ||
| 76 | -- @param tree string or nil: If given, specifies the local tree to use. | ||
| 77 | -- @return string: The resulting path -- does not guarantee that | ||
| 78 | -- the package (and by extension, the file) exists. | ||
| 79 | function path.rockspec_file(name, version, tree) | ||
| 80 | assert(type(name) == "string" and not name:match("/")) | ||
| 81 | assert(type(version) == "string") | ||
| 82 | return dir.path(path.rocks_dir(tree), name, version, name.."-"..version..".rockspec") | ||
| 83 | end | ||
| 84 | |||
| 85 | --- Get the local filename of the rock_manifest file of an installed rock. | ||
| 86 | -- @param name string: The package name. | ||
| 87 | -- @param version string: The package version. | ||
| 88 | -- @param tree string or nil: If given, specifies the local tree to use. | ||
| 89 | -- @return string: The resulting path -- does not guarantee that | ||
| 90 | -- the package (and by extension, the file) exists. | ||
| 91 | function path.rock_manifest_file(name, version, tree) | ||
| 92 | assert(type(name) == "string" and not name:match("/")) | ||
| 93 | assert(type(version) == "string") | ||
| 94 | return dir.path(path.rocks_dir(tree), name, version, "rock_manifest") | ||
| 95 | end | ||
| 96 | |||
| 97 | --- Get the local filename of the rock_namespace file of an installed rock. | ||
| 98 | -- @param name string: The package name (without a namespace). | ||
| 99 | -- @param version string: The package version. | ||
| 100 | -- @param tree string or nil: If given, specifies the local tree to use. | ||
| 101 | -- @return string: The resulting path -- does not guarantee that | ||
| 102 | -- the package (and by extension, the file) exists. | ||
| 103 | function path.rock_namespace_file(name, version, tree) | ||
| 104 | assert(type(name) == "string" and not name:match("/")) | ||
| 105 | assert(type(version) == "string") | ||
| 106 | return dir.path(path.rocks_dir(tree), name, version, "rock_namespace") | ||
| 107 | end | ||
| 108 | |||
| 109 | --- Get the local installation directory for C libraries of a package. | ||
| 110 | -- @param name string: The package name. | ||
| 111 | -- @param version string: The package version. | ||
| 112 | -- @param tree string or nil: If given, specifies the local tree to use. | ||
| 113 | -- @return string: The resulting path -- does not guarantee that | ||
| 114 | -- the package (and by extension, the path) exists. | ||
| 115 | function path.lib_dir(name, version, tree) | ||
| 116 | assert(type(name) == "string" and not name:match("/")) | ||
| 117 | assert(type(version) == "string") | ||
| 118 | return dir.path(path.rocks_dir(tree), name, version, "lib") | ||
| 119 | end | ||
| 120 | |||
| 121 | --- Get the local installation directory for Lua modules of a package. | ||
| 122 | -- @param name string: The package name. | ||
| 123 | -- @param version string: The package version. | ||
| 124 | -- @param tree string or nil: If given, specifies the local tree to use. | ||
| 125 | -- @return string: The resulting path -- does not guarantee that | ||
| 126 | -- the package (and by extension, the path) exists. | ||
| 127 | function path.lua_dir(name, version, tree) | ||
| 128 | assert(type(name) == "string" and not name:match("/")) | ||
| 129 | assert(type(version) == "string") | ||
| 130 | return dir.path(path.rocks_dir(tree), name, version, "lua") | ||
| 131 | end | ||
| 132 | |||
| 133 | --- Get the local installation directory for documentation of a package. | ||
| 134 | -- @param name string: The package name. | ||
| 135 | -- @param version string: The package version. | ||
| 136 | -- @param tree string or nil: If given, specifies the local tree to use. | ||
| 137 | -- @return string: The resulting path -- does not guarantee that | ||
| 138 | -- the package (and by extension, the path) exists. | ||
| 139 | function path.doc_dir(name, version, tree) | ||
| 140 | assert(type(name) == "string" and not name:match("/")) | ||
| 141 | assert(type(version) == "string") | ||
| 142 | return dir.path(path.rocks_dir(tree), name, version, "doc") | ||
| 143 | end | ||
| 144 | |||
| 145 | --- Get the local installation directory for configuration files of a package. | ||
| 146 | -- @param name string: The package name. | ||
| 147 | -- @param version string: The package version. | ||
| 148 | -- @param tree string or nil: If given, specifies the local tree to use. | ||
| 149 | -- @return string: The resulting path -- does not guarantee that | ||
| 150 | -- the package (and by extension, the path) exists. | ||
| 151 | function path.conf_dir(name, version, tree) | ||
| 152 | assert(type(name) == "string" and not name:match("/")) | ||
| 153 | assert(type(version) == "string") | ||
| 154 | return dir.path(path.rocks_dir(tree), name, version, "conf") | ||
| 155 | end | ||
| 156 | |||
| 157 | --- Get the local installation directory for command-line scripts | ||
| 158 | -- of a package. | ||
| 159 | -- @param name string: The package name. | ||
| 160 | -- @param version string: The package version. | ||
| 161 | -- @param tree string or nil: If given, specifies the local tree to use. | ||
| 162 | -- @return string: The resulting path -- does not guarantee that | ||
| 163 | -- the package (and by extension, the path) exists. | ||
| 164 | function path.bin_dir(name, version, tree) | ||
| 165 | assert(type(name) == "string" and not name:match("/")) | ||
| 166 | assert(type(version) == "string") | ||
| 167 | return dir.path(path.rocks_dir(tree), name, version, "bin") | ||
| 168 | end | ||
| 169 | |||
| 170 | --- Extract name, version and arch of a rock filename, | ||
| 171 | -- or name, version and "rockspec" from a rockspec name. | ||
| 172 | -- @param file_name string: pathname of a rock or rockspec | ||
| 173 | -- @return (string, string, string) or nil: name, version and arch | ||
| 174 | -- or nil if name could not be parsed | ||
| 175 | function path.parse_name(file_name) | ||
| 176 | assert(type(file_name) == "string") | ||
| 177 | if file_name:match("%.rock$") then | ||
| 178 | return dir.base_name(file_name):match("(.*)-([^-]+-%d+)%.([^.]+)%.rock$") | ||
| 179 | else | ||
| 180 | return dir.base_name(file_name):match("(.*)-([^-]+-%d+)%.(rockspec)") | ||
| 181 | end | ||
| 182 | end | ||
| 183 | |||
| 184 | --- Make a rockspec or rock URL. | ||
| 185 | -- @param pathname string: Base URL or pathname. | ||
| 186 | -- @param name string: Package name. | ||
| 187 | -- @param version string: Package version. | ||
| 188 | -- @param arch string: Architecture identifier, or "rockspec" or "installed". | ||
| 189 | -- @return string: A URL or pathname following LuaRocks naming conventions. | ||
| 190 | function path.make_url(pathname, name, version, arch) | ||
| 191 | assert(type(pathname) == "string") | ||
| 192 | assert(type(name) == "string" and not name:match("/")) | ||
| 193 | assert(type(version) == "string") | ||
| 194 | assert(type(arch) == "string") | ||
| 195 | |||
| 196 | local filename = name.."-"..version | ||
| 197 | if arch == "installed" then | ||
| 198 | filename = dir.path(name, version, filename..".rockspec") | ||
| 199 | elseif arch == "rockspec" then | ||
| 200 | filename = filename..".rockspec" | ||
| 201 | else | ||
| 202 | filename = filename.."."..arch..".rock" | ||
| 203 | end | ||
| 204 | return dir.path(pathname, filename) | ||
| 205 | end | ||
| 206 | |||
| 207 | --- Obtain the directory name where a module should be stored. | ||
| 208 | -- For example, on Unix, "foo.bar.baz" will return "foo/bar". | ||
| 209 | -- @param mod string: A module name in Lua dot-separated format. | ||
| 210 | -- @return string: A directory name using the platform's separator. | ||
| 211 | function path.module_to_path(mod) | ||
| 212 | assert(type(mod) == "string") | ||
| 213 | return (mod:gsub("[^.]*$", ""):gsub("%.", "/")) | ||
| 214 | end | ||
| 215 | |||
| 216 | function path.use_tree(tree) | ||
| 217 | cfg.root_dir = tree | ||
| 218 | cfg.rocks_dir = path.rocks_dir(tree) | ||
| 219 | cfg.deploy_bin_dir = path.deploy_bin_dir(tree) | ||
| 220 | cfg.deploy_lua_dir = path.deploy_lua_dir(tree) | ||
| 221 | cfg.deploy_lib_dir = path.deploy_lib_dir(tree) | ||
| 222 | end | ||
| 223 | |||
| 224 | function path.add_to_package_paths(tree) | ||
| 225 | package.path = dir.path(path.deploy_lua_dir(tree), "?.lua") .. ";" | ||
| 226 | .. dir.path(path.deploy_lua_dir(tree), "?/init.lua") .. ";" | ||
| 227 | .. package.path | ||
| 228 | package.cpath = dir.path(path.deploy_lib_dir(tree), "?." .. cfg.lib_extension) .. ";" | ||
| 229 | .. package.cpath | ||
| 230 | end | ||
| 231 | |||
| 232 | --- Get the namespace of a locally-installed rock, if any. | ||
| 233 | -- @param name string: The rock name, without a namespace. | ||
| 234 | -- @param version string: The rock version. | ||
| 235 | -- @param tree string: The local tree to use. | ||
| 236 | -- @return string?: The namespace if it exists, or nil. | ||
| 237 | function path.read_namespace(name, version, tree) | ||
| 238 | assert(type(name) == "string" and not name:match("/")) | ||
| 239 | assert(type(version) == "string") | ||
| 240 | assert(type(tree) == "string") | ||
| 241 | |||
| 242 | local namespace | ||
| 243 | local fd = io.open(path.rock_namespace_file(name, version, tree), "r") | ||
| 244 | if fd then | ||
| 245 | namespace = fd:read("*a") | ||
| 246 | fd:close() | ||
| 247 | end | ||
| 248 | return namespace | ||
| 249 | end | ||
| 250 | |||
| 251 | function path.package_paths(deps_mode) | ||
| 252 | local lpaths = {} | ||
| 253 | local lcpaths = {} | ||
| 254 | path.map_trees(deps_mode, function(tree) | ||
| 255 | local root = path.root_dir(tree) | ||
| 256 | table.insert(lpaths, dir.path(root, cfg.lua_modules_path, "?.lua")) | ||
| 257 | table.insert(lpaths, dir.path(root, cfg.lua_modules_path, "?/init.lua")) | ||
| 258 | table.insert(lcpaths, dir.path(root, cfg.lib_modules_path, "?." .. cfg.lib_extension)) | ||
| 259 | end) | ||
| 260 | return table.concat(lpaths, ";"), table.concat(lcpaths, ";") | ||
| 261 | end | ||
| 262 | |||
| 263 | return path | ||
diff --git a/src/luarocks/path.lua b/src/luarocks/path.lua index 19657c83..65c1a7d2 100644 --- a/src/luarocks/path.lua +++ b/src/luarocks/path.lua | |||
| @@ -1,13 +1,24 @@ | |||
| 1 | local _tl_compat; if (tonumber((_VERSION or ''):match('[%d.]*$')) or 0) < 5.3 then local p, m = pcall(require, 'compat53.module'); if p then _tl_compat = m end end; local assert = _tl_compat and _tl_compat.assert or assert; local io = _tl_compat and _tl_compat.io or io; local package = _tl_compat and _tl_compat.package or package; local string = _tl_compat and _tl_compat.string or string; local table = _tl_compat and _tl_compat.table or table | ||
| 2 | |||
| 1 | 3 | ||
| 2 | --- LuaRocks-specific path handling functions. | ||
| 3 | -- All paths are configured in this module, making it a single | ||
| 4 | -- point where the layout of the local installation is defined in LuaRocks. | ||
| 5 | local path = {} | ||
| 6 | 4 | ||
| 5 | |||
| 6 | local cfg = require("luarocks.core.cfg") | ||
| 7 | local core = require("luarocks.core.path") | 7 | local core = require("luarocks.core.path") |
| 8 | local dir = require("luarocks.dir") | 8 | local dir = require("luarocks.dir") |
| 9 | local cfg = require("luarocks.core.cfg") | 9 | local util = require("luarocks.core.util") |
| 10 | local util = require("luarocks.util") | 10 | |
| 11 | |||
| 12 | |||
| 13 | local path = {} | ||
| 14 | |||
| 15 | |||
| 16 | |||
| 17 | |||
| 18 | |||
| 19 | |||
| 20 | |||
| 21 | |||
| 11 | 22 | ||
| 12 | path.rocks_dir = core.rocks_dir | 23 | path.rocks_dir = core.rocks_dir |
| 13 | path.versioned_name = core.versioned_name | 24 | path.versioned_name = core.versioned_name |
| @@ -17,29 +28,26 @@ path.deploy_lib_dir = core.deploy_lib_dir | |||
| 17 | path.map_trees = core.map_trees | 28 | path.map_trees = core.map_trees |
| 18 | path.rocks_tree_to_string = core.rocks_tree_to_string | 29 | path.rocks_tree_to_string = core.rocks_tree_to_string |
| 19 | 30 | ||
| 20 | --- Infer rockspec filename from a rock filename. | 31 | function path.root_dir(tree) |
| 21 | -- @param rock_name string: Pathname of a rock file. | 32 | if type(tree) == "string" then |
| 22 | -- @return string: Filename of the rockspec, without path. | 33 | return tree |
| 34 | else | ||
| 35 | return tree.root | ||
| 36 | end | ||
| 37 | end | ||
| 38 | |||
| 39 | |||
| 40 | |||
| 41 | |||
| 23 | function path.rockspec_name_from_rock(rock_name) | 42 | function path.rockspec_name_from_rock(rock_name) |
| 24 | assert(type(rock_name) == "string") | ||
| 25 | local base_name = dir.base_name(rock_name) | 43 | local base_name = dir.base_name(rock_name) |
| 26 | return base_name:match("(.*)%.[^.]*.rock") .. ".rockspec" | 44 | return base_name:match("(.*)%.[^.]*.rock") .. ".rockspec" |
| 27 | end | 45 | end |
| 28 | 46 | ||
| 29 | function path.root_from_rocks_dir(rocks_dir) | 47 | function path.root_from_rocks_dir(rocks_dir) |
| 30 | assert(type(rocks_dir) == "string") | ||
| 31 | return rocks_dir:match("(.*)" .. util.matchquote(cfg.rocks_subdir) .. ".*$") | 48 | return rocks_dir:match("(.*)" .. util.matchquote(cfg.rocks_subdir) .. ".*$") |
| 32 | end | 49 | end |
| 33 | 50 | ||
| 34 | function path.root_dir(tree) | ||
| 35 | if type(tree) == "string" then | ||
| 36 | return tree | ||
| 37 | else | ||
| 38 | assert(type(tree) == "table") | ||
| 39 | return tree.root | ||
| 40 | end | ||
| 41 | end | ||
| 42 | |||
| 43 | function path.deploy_bin_dir(tree) | 51 | function path.deploy_bin_dir(tree) |
| 44 | return dir.path(path.root_dir(tree), "bin") | 52 | return dir.path(path.root_dir(tree), "bin") |
| 45 | end | 53 | end |
| @@ -48,132 +56,122 @@ function path.manifest_file(tree) | |||
| 48 | return dir.path(path.rocks_dir(tree), "manifest") | 56 | return dir.path(path.rocks_dir(tree), "manifest") |
| 49 | end | 57 | end |
| 50 | 58 | ||
| 51 | --- Get the directory for all versions of a package in a tree. | 59 | |
| 52 | -- @param name string: The package name. | 60 | |
| 53 | -- @return string: The resulting path -- does not guarantee that | 61 | |
| 54 | -- @param tree string or nil: If given, specifies the local tree to use. | 62 | |
| 55 | -- the package (and by extension, the path) exists. | 63 | |
| 56 | function path.versions_dir(name, tree) | 64 | function path.versions_dir(name, tree) |
| 57 | assert(type(name) == "string" and not name:match("/")) | 65 | assert(not name:match("/")) |
| 58 | return dir.path(path.rocks_dir(tree), name) | 66 | return dir.path(path.rocks_dir(tree), name) |
| 59 | end | 67 | end |
| 60 | 68 | ||
| 61 | --- Get the local installation directory (prefix) for a package. | 69 | |
| 62 | -- @param name string: The package name. | 70 | |
| 63 | -- @param version string: The package version. | 71 | |
| 64 | -- @param tree string or nil: If given, specifies the local tree to use. | 72 | |
| 65 | -- @return string: The resulting path -- does not guarantee that | 73 | |
| 66 | -- the package (and by extension, the path) exists. | 74 | |
| 67 | function path.install_dir(name, version, tree) | 75 | function path.install_dir(name, version, tree) |
| 68 | assert(type(name) == "string" and not name:match("/")) | 76 | assert(not name:match("/")) |
| 69 | assert(type(version) == "string") | ||
| 70 | return dir.path(path.rocks_dir(tree), name, version) | 77 | return dir.path(path.rocks_dir(tree), name, version) |
| 71 | end | 78 | end |
| 72 | 79 | ||
| 73 | --- Get the local filename of the rockspec of an installed rock. | 80 | |
| 74 | -- @param name string: The package name. | 81 | |
| 75 | -- @param version string: The package version. | 82 | |
| 76 | -- @param tree string or nil: If given, specifies the local tree to use. | 83 | |
| 77 | -- @return string: The resulting path -- does not guarantee that | 84 | |
| 78 | -- the package (and by extension, the file) exists. | 85 | |
| 79 | function path.rockspec_file(name, version, tree) | 86 | function path.rockspec_file(name, version, tree) |
| 80 | assert(type(name) == "string" and not name:match("/")) | 87 | assert(not name:match("/")) |
| 81 | assert(type(version) == "string") | 88 | return dir.path(path.rocks_dir(tree), name, version, name .. "-" .. version .. ".rockspec") |
| 82 | return dir.path(path.rocks_dir(tree), name, version, name.."-"..version..".rockspec") | ||
| 83 | end | 89 | end |
| 84 | 90 | ||
| 85 | --- Get the local filename of the rock_manifest file of an installed rock. | 91 | |
| 86 | -- @param name string: The package name. | 92 | |
| 87 | -- @param version string: The package version. | 93 | |
| 88 | -- @param tree string or nil: If given, specifies the local tree to use. | 94 | |
| 89 | -- @return string: The resulting path -- does not guarantee that | 95 | |
| 90 | -- the package (and by extension, the file) exists. | 96 | |
| 91 | function path.rock_manifest_file(name, version, tree) | 97 | function path.rock_manifest_file(name, version, tree) |
| 92 | assert(type(name) == "string" and not name:match("/")) | 98 | assert(not name:match("/")) |
| 93 | assert(type(version) == "string") | ||
| 94 | return dir.path(path.rocks_dir(tree), name, version, "rock_manifest") | 99 | return dir.path(path.rocks_dir(tree), name, version, "rock_manifest") |
| 95 | end | 100 | end |
| 96 | 101 | ||
| 97 | --- Get the local filename of the rock_namespace file of an installed rock. | 102 | |
| 98 | -- @param name string: The package name (without a namespace). | 103 | |
| 99 | -- @param version string: The package version. | 104 | |
| 100 | -- @param tree string or nil: If given, specifies the local tree to use. | 105 | |
| 101 | -- @return string: The resulting path -- does not guarantee that | 106 | |
| 102 | -- the package (and by extension, the file) exists. | 107 | |
| 103 | function path.rock_namespace_file(name, version, tree) | 108 | function path.rock_namespace_file(name, version, tree) |
| 104 | assert(type(name) == "string" and not name:match("/")) | 109 | assert(not name:match("/")) |
| 105 | assert(type(version) == "string") | ||
| 106 | return dir.path(path.rocks_dir(tree), name, version, "rock_namespace") | 110 | return dir.path(path.rocks_dir(tree), name, version, "rock_namespace") |
| 107 | end | 111 | end |
| 108 | 112 | ||
| 109 | --- Get the local installation directory for C libraries of a package. | 113 | |
| 110 | -- @param name string: The package name. | 114 | |
| 111 | -- @param version string: The package version. | 115 | |
| 112 | -- @param tree string or nil: If given, specifies the local tree to use. | 116 | |
| 113 | -- @return string: The resulting path -- does not guarantee that | 117 | |
| 114 | -- the package (and by extension, the path) exists. | 118 | |
| 115 | function path.lib_dir(name, version, tree) | 119 | function path.lib_dir(name, version, tree) |
| 116 | assert(type(name) == "string" and not name:match("/")) | 120 | assert(not name:match("/")) |
| 117 | assert(type(version) == "string") | ||
| 118 | return dir.path(path.rocks_dir(tree), name, version, "lib") | 121 | return dir.path(path.rocks_dir(tree), name, version, "lib") |
| 119 | end | 122 | end |
| 120 | 123 | ||
| 121 | --- Get the local installation directory for Lua modules of a package. | 124 | |
| 122 | -- @param name string: The package name. | 125 | |
| 123 | -- @param version string: The package version. | 126 | |
| 124 | -- @param tree string or nil: If given, specifies the local tree to use. | 127 | |
| 125 | -- @return string: The resulting path -- does not guarantee that | 128 | |
| 126 | -- the package (and by extension, the path) exists. | 129 | |
| 127 | function path.lua_dir(name, version, tree) | 130 | function path.lua_dir(name, version, tree) |
| 128 | assert(type(name) == "string" and not name:match("/")) | 131 | assert(not name:match("/")) |
| 129 | assert(type(version) == "string") | ||
| 130 | return dir.path(path.rocks_dir(tree), name, version, "lua") | 132 | return dir.path(path.rocks_dir(tree), name, version, "lua") |
| 131 | end | 133 | end |
| 132 | 134 | ||
| 133 | --- Get the local installation directory for documentation of a package. | 135 | |
| 134 | -- @param name string: The package name. | 136 | |
| 135 | -- @param version string: The package version. | 137 | |
| 136 | -- @param tree string or nil: If given, specifies the local tree to use. | 138 | |
| 137 | -- @return string: The resulting path -- does not guarantee that | 139 | |
| 138 | -- the package (and by extension, the path) exists. | 140 | |
| 139 | function path.doc_dir(name, version, tree) | 141 | function path.doc_dir(name, version, tree) |
| 140 | assert(type(name) == "string" and not name:match("/")) | 142 | assert(not name:match("/")) |
| 141 | assert(type(version) == "string") | ||
| 142 | return dir.path(path.rocks_dir(tree), name, version, "doc") | 143 | return dir.path(path.rocks_dir(tree), name, version, "doc") |
| 143 | end | 144 | end |
| 144 | 145 | ||
| 145 | --- Get the local installation directory for configuration files of a package. | 146 | |
| 146 | -- @param name string: The package name. | 147 | |
| 147 | -- @param version string: The package version. | 148 | |
| 148 | -- @param tree string or nil: If given, specifies the local tree to use. | 149 | |
| 149 | -- @return string: The resulting path -- does not guarantee that | 150 | |
| 150 | -- the package (and by extension, the path) exists. | 151 | |
| 151 | function path.conf_dir(name, version, tree) | 152 | function path.conf_dir(name, version, tree) |
| 152 | assert(type(name) == "string" and not name:match("/")) | 153 | assert(not name:match("/")) |
| 153 | assert(type(version) == "string") | ||
| 154 | return dir.path(path.rocks_dir(tree), name, version, "conf") | 154 | return dir.path(path.rocks_dir(tree), name, version, "conf") |
| 155 | end | 155 | end |
| 156 | 156 | ||
| 157 | --- Get the local installation directory for command-line scripts | 157 | |
| 158 | -- of a package. | 158 | |
| 159 | -- @param name string: The package name. | 159 | |
| 160 | -- @param version string: The package version. | 160 | |
| 161 | -- @param tree string or nil: If given, specifies the local tree to use. | 161 | |
| 162 | -- @return string: The resulting path -- does not guarantee that | 162 | |
| 163 | -- the package (and by extension, the path) exists. | 163 | |
| 164 | function path.bin_dir(name, version, tree) | 164 | function path.bin_dir(name, version, tree) |
| 165 | assert(type(name) == "string" and not name:match("/")) | 165 | assert(not name:match("/")) |
| 166 | assert(type(version) == "string") | ||
| 167 | return dir.path(path.rocks_dir(tree), name, version, "bin") | 166 | return dir.path(path.rocks_dir(tree), name, version, "bin") |
| 168 | end | 167 | end |
| 169 | 168 | ||
| 170 | --- Extract name, version and arch of a rock filename, | 169 | |
| 171 | -- or name, version and "rockspec" from a rockspec name. | 170 | |
| 172 | -- @param file_name string: pathname of a rock or rockspec | 171 | |
| 173 | -- @return (string, string, string) or nil: name, version and arch | 172 | |
| 174 | -- or nil if name could not be parsed | 173 | |
| 175 | function path.parse_name(file_name) | 174 | function path.parse_name(file_name) |
| 176 | assert(type(file_name) == "string") | ||
| 177 | if file_name:match("%.rock$") then | 175 | if file_name:match("%.rock$") then |
| 178 | return dir.base_name(file_name):match("(.*)-([^-]+-%d+)%.([^.]+)%.rock$") | 176 | return dir.base_name(file_name):match("(.*)-([^-]+-%d+)%.([^.]+)%.rock$") |
| 179 | else | 177 | else |
| @@ -181,35 +179,30 @@ function path.parse_name(file_name) | |||
| 181 | end | 179 | end |
| 182 | end | 180 | end |
| 183 | 181 | ||
| 184 | --- Make a rockspec or rock URL. | ||
| 185 | -- @param pathname string: Base URL or pathname. | ||
| 186 | -- @param name string: Package name. | ||
| 187 | -- @param version string: Package version. | ||
| 188 | -- @param arch string: Architecture identifier, or "rockspec" or "installed". | ||
| 189 | -- @return string: A URL or pathname following LuaRocks naming conventions. | ||
| 190 | function path.make_url(pathname, name, version, arch) | ||
| 191 | assert(type(pathname) == "string") | ||
| 192 | assert(type(name) == "string" and not name:match("/")) | ||
| 193 | assert(type(version) == "string") | ||
| 194 | assert(type(arch) == "string") | ||
| 195 | 182 | ||
| 196 | local filename = name.."-"..version | 183 | |
| 184 | |||
| 185 | |||
| 186 | |||
| 187 | |||
| 188 | function path.make_url(pathname, name, version, arch) | ||
| 189 | assert(not name:match("/")) | ||
| 190 | local filename = name .. "-" .. version | ||
| 197 | if arch == "installed" then | 191 | if arch == "installed" then |
| 198 | filename = dir.path(name, version, filename..".rockspec") | 192 | filename = dir.path(name, version, filename .. ".rockspec") |
| 199 | elseif arch == "rockspec" then | 193 | elseif arch == "rockspec" then |
| 200 | filename = filename..".rockspec" | 194 | filename = filename .. ".rockspec" |
| 201 | else | 195 | else |
| 202 | filename = filename.."."..arch..".rock" | 196 | filename = filename .. "." .. arch .. ".rock" |
| 203 | end | 197 | end |
| 204 | return dir.path(pathname, filename) | 198 | return dir.path(pathname, filename) |
| 205 | end | 199 | end |
| 206 | 200 | ||
| 207 | --- Obtain the directory name where a module should be stored. | 201 | |
| 208 | -- For example, on Unix, "foo.bar.baz" will return "foo/bar". | 202 | |
| 209 | -- @param mod string: A module name in Lua dot-separated format. | 203 | |
| 210 | -- @return string: A directory name using the platform's separator. | 204 | |
| 211 | function path.module_to_path(mod) | 205 | function path.module_to_path(mod) |
| 212 | assert(type(mod) == "string") | ||
| 213 | return (mod:gsub("[^.]*$", ""):gsub("%.", "/")) | 206 | return (mod:gsub("[^.]*$", ""):gsub("%.", "/")) |
| 214 | end | 207 | end |
| 215 | 208 | ||
| @@ -222,22 +215,20 @@ function path.use_tree(tree) | |||
| 222 | end | 215 | end |
| 223 | 216 | ||
| 224 | function path.add_to_package_paths(tree) | 217 | function path.add_to_package_paths(tree) |
| 225 | package.path = dir.path(path.deploy_lua_dir(tree), "?.lua") .. ";" | 218 | package.path = dir.path(path.deploy_lua_dir(tree), "?.lua") .. ";" .. |
| 226 | .. dir.path(path.deploy_lua_dir(tree), "?/init.lua") .. ";" | 219 | dir.path(path.deploy_lua_dir(tree), "?/init.lua") .. ";" .. |
| 227 | .. package.path | 220 | package.path |
| 228 | package.cpath = dir.path(path.deploy_lib_dir(tree), "?." .. cfg.lib_extension) .. ";" | 221 | package.cpath = dir.path(path.deploy_lib_dir(tree), "?." .. cfg.lib_extension) .. ";" .. |
| 229 | .. package.cpath | 222 | package.cpath |
| 230 | end | 223 | end |
| 231 | 224 | ||
| 232 | --- Get the namespace of a locally-installed rock, if any. | 225 | |
| 233 | -- @param name string: The rock name, without a namespace. | 226 | |
| 234 | -- @param version string: The rock version. | 227 | |
| 235 | -- @param tree string: The local tree to use. | 228 | |
| 236 | -- @return string?: The namespace if it exists, or nil. | 229 | |
| 237 | function path.read_namespace(name, version, tree) | 230 | function path.read_namespace(name, version, tree) |
| 238 | assert(type(name) == "string" and not name:match("/")) | 231 | assert(not name:match("/")) |
| 239 | assert(type(version) == "string") | ||
| 240 | assert(type(tree) == "string") | ||
| 241 | 232 | ||
| 242 | local namespace | 233 | local namespace |
| 243 | local fd = io.open(path.rock_namespace_file(name, version, tree), "r") | 234 | local fd = io.open(path.rock_namespace_file(name, version, tree), "r") |
