Annotate

util/paths.lua @ 13245:ffe4adbd2af9

util.array: Fix new() library function
author Kim Alvefur <zash@zash.se>
date Sat, 22 Jul 2023 16:31:05 +0200
parent 11183:2ac63715ef6f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
11183
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10402
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: 10402
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: 10402
diff changeset
42 if b then
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10402
diff changeset
43 if c then
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10402
diff changeset
44 if ... then
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10402
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: 10402
diff changeset
46 end
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10402
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: 10402
diff changeset
48 end
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10402
diff changeset
49 return a..path_sep..b;
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10402
diff changeset
50 end
2ac63715ef6f util.paths: Optimize path joining with few arguments
Kim Alvefur <zash@zash.se>
parents: 10402
diff changeset
51 return a;
6505
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
10197
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6505
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: 6505
diff changeset
55 -- Checking for duplicates
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6505
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: 6505
diff changeset
57 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
58 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
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: 6505
diff changeset
60 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
61 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
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: 10197
diff changeset
63 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
64 end
10402
0971694b30a8 util.paths: Don't treat path as pattern, fix traceback (thanks Menel87)
Kim Alvefur <zash@zash.se>
parents: 10204
diff changeset
65 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
66 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
67 end
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6505
diff changeset
68 end
91085371cfc5 util.paths: Added the function 'complement_lua_path'
João Duarte <jvsDuarte08@gmail.com>
parents: 6505
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;