Software /
code /
prosody
Annotate
util/paths.lua @ 10695:52886aad9ee1
usermanager: Fix traceback when checking admin status of host-only JIDs (fixes #1508)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 19 Mar 2020 14:12:40 +0000 |
parent | 10402:0971694b30a8 |
child | 11183:2ac63715ef6f |
rev | line source |
---|---|
6505
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 |
6505
2dc8dbd0940e
util.paths: Add function for joining path segments
Kim Alvefur <zash@zash.se>
parents:
6164
diff
changeset
|
40 function path_util.join(...) |
2dc8dbd0940e
util.paths: Add function for joining path segments
Kim Alvefur <zash@zash.se>
parents:
6164
diff
changeset
|
41 return t_concat({...}, path_sep); |
2dc8dbd0940e
util.paths: Add function for joining path segments
Kim Alvefur <zash@zash.se>
parents:
6164
diff
changeset
|
42 end |
2dc8dbd0940e
util.paths: Add function for joining path segments
Kim Alvefur <zash@zash.se>
parents:
6164
diff
changeset
|
43 |
10197
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6505
diff
changeset
|
44 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:
6505
diff
changeset
|
45 -- Checking for duplicates |
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6505
diff
changeset
|
46 -- 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:
6505
diff
changeset
|
47 local lua_version = _VERSION:match(" (.+)$"); |
10200
48ee50ed9972
util.paths: Refactored a variable, to avoid shadowing
João Duarte <jvsDuarte08@gmail.com>
parents:
10197
diff
changeset
|
48 local lua_path_sep = package.config:sub(3,3); |
10197
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6505
diff
changeset
|
49 local dir_sep = package.config:sub(1,1); |
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6505
diff
changeset
|
50 local sub_path = dir_sep.."lua"..dir_sep..lua_version..dir_sep; |
10402
0971694b30a8
util.paths: Don't treat path as pattern, fix traceback (thanks Menel87)
Kim Alvefur <zash@zash.se>
parents:
10204
diff
changeset
|
51 if not string.find(package.path, installer_plugin_path, 1, true) then |
10200
48ee50ed9972
util.paths: Refactored a variable, to avoid shadowing
João Duarte <jvsDuarte08@gmail.com>
parents:
10197
diff
changeset
|
52 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:
10197
diff
changeset
|
53 package.path = package.path..lua_path_sep..installer_plugin_path..dir_sep.."share"..sub_path.."?"..dir_sep.."init.lua"; |
10197
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6505
diff
changeset
|
54 end |
10402
0971694b30a8
util.paths: Don't treat path as pattern, fix traceback (thanks Menel87)
Kim Alvefur <zash@zash.se>
parents:
10204
diff
changeset
|
55 if not string.find(package.path, installer_plugin_path, 1, true) then |
10204
fbd4a5bc3a01
util.paths: Fixed file termination for package.cpath's extra path
João Duarte <jvsDuarte08@gmail.com>
parents:
10200
diff
changeset
|
56 package.cpath = package.cpath..lua_path_sep..installer_plugin_path..dir_sep.."lib"..sub_path.."?.so"; |
10197
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6505
diff
changeset
|
57 end |
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6505
diff
changeset
|
58 end |
91085371cfc5
util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents:
6505
diff
changeset
|
59 |
6164
ef4024f6bc40
core.configmanager: Move path utility functions into util.paths
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 return path_util; |