author | Kim Alvefur <zash@zash.se> |
Thu, 15 Sep 2022 11:05:21 +0200 | |
branch | 0.12 |
changeset 12728 | 5b5b428d67e2 |
parent 11187 | 2ac63715ef6f |
permissions | -rw-r--r-- |
6508
2dc8dbd0940e
util.paths: Add function for joining path segments
Kim Alvefur <zash@zash.se>
parents:
6164
diff
changeset
|
1 |
local t_concat = table.concat; |
2dc8dbd0940e
util.paths: Add function for joining path segments
Kim Alvefur <zash@zash.se>
parents:
6164
diff
changeset
|
2 |
|
6164
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 |
local path_sep = package.config:sub(1,1); |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 |
|
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 |
local path_util = {} |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 |
|
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 |
-- Helper function to resolve relative paths (needed by config) |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 |
function path_util.resolve_relative_path(parent_path, path) |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 |
if path then |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 |
-- Some normalization |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 |
parent_path = parent_path:gsub("%"..path_sep.."+$", ""); |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 |
path = path:gsub("^%.%"..path_sep.."+", ""); |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 |
|
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 |
local is_relative; |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 |
if path_sep == "/" and path:sub(1,1) ~= "/" then |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 |
is_relative = true; |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 |
elseif path_sep == "\\" and (path:sub(1,1) ~= "/" and (path:sub(2,3) ~= ":\\" and path:sub(2,3) ~= ":/")) then |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 |
is_relative = true; |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 |
end |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 |
if is_relative then |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 |
return parent_path..path_sep..path; |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 |
end |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
end |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 |
return path; |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 |
end |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 |
|
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 |
-- Helper function to convert a glob to a Lua pattern |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 |
function path_util.glob_to_pattern(glob) |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 |
return "^"..glob:gsub("[%p*?]", function (c) |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 |
if c == "*" then |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 |
return ".*"; |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 |
elseif c == "?" then |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 |
return "."; |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 |
else |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 |
return "%"..c; |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 |
end |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 |
end).."$"; |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 |
end |
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 |
|
11187
2ac63715ef6f
util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
40 |
function path_util.join(a, b, c, ...) -- (... : string) --> string |
2ac63715ef6f
util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
41 |
-- Optimization: Avoid creating table for most uses |
2ac63715ef6f
util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
42 |
if b then |
2ac63715ef6f
util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
43 |
if c then |
2ac63715ef6f
util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
44 |
if ... then |
2ac63715ef6f
util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
45 |
return t_concat({a,b,c,...}, path_sep); |
2ac63715ef6f
util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
46 |
end |
2ac63715ef6f
util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
47 |
return a..path_sep..b..path_sep..c; |
2ac63715ef6f
util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
48 |
end |
2ac63715ef6f
util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
49 |
return a..path_sep..b; |
2ac63715ef6f
util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
50 |
end |
2ac63715ef6f
util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents:
10406
diff
changeset
|
51 |
return a; |
6508
2dc8dbd0940e
util.paths: Add function for joining path segments
Kim Alvefur <zash@zash.se>
parents:
6164
diff
changeset
|
52 |
end |
2dc8dbd0940e
util.paths: Add function for joining path segments
Kim Alvefur <zash@zash.se>
parents:
6164
diff
changeset
|
53 |
|
10201
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6508
diff
changeset
|
54 |
function path_util.complement_lua_path(installer_plugin_path) |
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6508
diff
changeset
|
55 |
-- Checking for duplicates |
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6508
diff
changeset
|
56 |
-- The commands using luarocks need the path to the directory that has the /share and /lib folders. |
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6508
diff
changeset
|
57 |
local lua_version = _VERSION:match(" (.+)$"); |
10204
48ee50ed9972
util.paths: Refactored a variable, to avoid shadowing
João Duarte <jvsDuarte08@gmail.com>
parents:
10201
diff
changeset
|
58 |
local lua_path_sep = package.config:sub(3,3); |
10201
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6508
diff
changeset
|
59 |
local dir_sep = package.config:sub(1,1); |
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6508
diff
changeset
|
60 |
local sub_path = dir_sep.."lua"..dir_sep..lua_version..dir_sep; |
10406
0971694b30a8
util.paths: Don't treat path as pattern, fix traceback (thanks Menel87)
Kim Alvefur <zash@zash.se>
parents:
10208
diff
changeset
|
61 |
if not string.find(package.path, installer_plugin_path, 1, true) then |
10204
48ee50ed9972
util.paths: Refactored a variable, to avoid shadowing
João Duarte <jvsDuarte08@gmail.com>
parents:
10201
diff
changeset
|
62 |
package.path = package.path..lua_path_sep..installer_plugin_path..dir_sep.."share"..sub_path.."?.lua"; |
48ee50ed9972
util.paths: Refactored a variable, to avoid shadowing
João Duarte <jvsDuarte08@gmail.com>
parents:
10201
diff
changeset
|
63 |
package.path = package.path..lua_path_sep..installer_plugin_path..dir_sep.."share"..sub_path.."?"..dir_sep.."init.lua"; |
10201
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6508
diff
changeset
|
64 |
end |
10406
0971694b30a8
util.paths: Don't treat path as pattern, fix traceback (thanks Menel87)
Kim Alvefur <zash@zash.se>
parents:
10208
diff
changeset
|
65 |
if not string.find(package.path, installer_plugin_path, 1, true) then |
10208
fbd4a5bc3a01
util.paths: Fixed file termination for package.cpath's extra path
João Duarte <jvsDuarte08@gmail.com>
parents:
10204
diff
changeset
|
66 |
package.cpath = package.cpath..lua_path_sep..installer_plugin_path..dir_sep.."lib"..sub_path.."?.so"; |
10201
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6508
diff
changeset
|
67 |
end |
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6508
diff
changeset
|
68 |
end |
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6508
diff
changeset
|
69 |
|
6164
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 |
return path_util; |