diff options
| author | V1K1NGbg <victor@ilchev.com> | 2024-08-22 17:49:06 -0300 |
|---|---|---|
| committer | Hisham Muhammad <hisham@gobolinux.org> | 2024-10-21 13:30:51 -0300 |
| commit | dddf557babfb022b77e3db387117e01fb9cf402a (patch) | |
| tree | e3d30a919d79b9d63ec48007170a05cee0b0011e /src | |
| parent | 89e3d89c96d2b18c61e085fd4b1fd490dfe0fe5a (diff) | |
| download | luarocks-dddf557babfb022b77e3db387117e01fb9cf402a.tar.gz luarocks-dddf557babfb022b77e3db387117e01fb9cf402a.tar.bz2 luarocks-dddf557babfb022b77e3db387117e01fb9cf402a.zip | |
Teal: convert luarocks.core.dir
Diffstat (limited to 'src')
| -rw-r--r-- | src/luarocks/core/dir.tl (renamed from src/luarocks/core/dir.lua) | 56 |
1 files changed, 27 insertions, 29 deletions
diff --git a/src/luarocks/core/dir.lua b/src/luarocks/core/dir.tl index 5d6f2c9f..20068341 100644 --- a/src/luarocks/core/dir.lua +++ b/src/luarocks/core/dir.tl | |||
| @@ -1,12 +1,10 @@ | |||
| 1 | 1 | local record dir | |
| 2 | local dir = {} | 2 | end |
| 3 | |||
| 4 | local require = nil | ||
| 5 | -------------------------------------------------------------------------------- | 3 | -------------------------------------------------------------------------------- |
| 6 | 4 | ||
| 7 | local dir_sep = package.config:sub(1, 1) | 5 | local dir_sep = package.config:sub(1, 1) |
| 8 | 6 | ||
| 9 | local function unquote(c) | 7 | local function unquote(c: string): string |
| 10 | local first, last = c:sub(1,1), c:sub(-1) | 8 | local first, last = c:sub(1,1), c:sub(-1) |
| 11 | if (first == '"' and last == '"') or | 9 | if (first == '"' and last == '"') or |
| 12 | (first == "'" and last == "'") then | 10 | (first == "'" and last == "'") then |
| @@ -15,33 +13,12 @@ local function unquote(c) | |||
| 15 | return c | 13 | return c |
| 16 | end | 14 | end |
| 17 | 15 | ||
| 18 | --- Describe a path in a cross-platform way. | ||
| 19 | -- Use this function to avoid platform-specific directory | ||
| 20 | -- separators in other modules. Removes trailing slashes from | ||
| 21 | -- each component given, to avoid repeated separators. | ||
| 22 | -- Separators inside strings are kept, to handle URLs containing | ||
| 23 | -- protocols. | ||
| 24 | -- @param ... strings representing directories | ||
| 25 | -- @return string: a string with a platform-specific representation | ||
| 26 | -- of the path. | ||
| 27 | function dir.path(...) | ||
| 28 | local t = {...} | ||
| 29 | while t[1] == "" do | ||
| 30 | table.remove(t, 1) | ||
| 31 | end | ||
| 32 | for i, c in ipairs(t) do | ||
| 33 | t[i] = unquote(c) | ||
| 34 | end | ||
| 35 | return dir.normalize(table.concat(t, "/")) | ||
| 36 | end | ||
| 37 | |||
| 38 | --- Split protocol and path from an URL or local pathname. | 16 | --- Split protocol and path from an URL or local pathname. |
| 39 | -- URLs should be in the "protocol://path" format. | 17 | -- URLs should be in the "protocol://path" format. |
| 40 | -- For local pathnames, "file" is returned as the protocol. | 18 | -- For local pathnames, "file" is returned as the protocol. |
| 41 | -- @param url string: an URL or a local pathname. | 19 | -- @param url string: an URL or a local pathname. |
| 42 | -- @return string, string: the protocol, and the pathname without the protocol. | 20 | -- @return string, string: the protocol, and the pathname without the protocol. |
| 43 | function dir.split_url(url) | 21 | function dir.split_url(url: string): string, string |
| 44 | assert(type(url) == "string") | ||
| 45 | 22 | ||
| 46 | url = unquote(url) | 23 | url = unquote(url) |
| 47 | local protocol, pathname = url:match("^([^:]*)://(.*)") | 24 | local protocol, pathname = url:match("^([^:]*)://(.*)") |
| @@ -58,10 +35,10 @@ end | |||
| 58 | -- for 'file' URLs, the native system's slashes are used. | 35 | -- for 'file' URLs, the native system's slashes are used. |
| 59 | -- @param url string: an URL or a local pathname. | 36 | -- @param url string: an URL or a local pathname. |
| 60 | -- @return string: Normalized result. | 37 | -- @return string: Normalized result. |
| 61 | function dir.normalize(name) | 38 | function dir.normalize(name: string): string |
| 62 | local protocol, pathname = dir.split_url(name) | 39 | local protocol, pathname = dir.split_url(name) |
| 63 | pathname = pathname:gsub("\\", "/"):gsub("(.)/*$", "%1"):gsub("//", "/") | 40 | pathname = pathname:gsub("\\", "/"):gsub("(.)/*$", "%1"):gsub("//", "/") |
| 64 | local pieces = {} | 41 | local pieces: {string} = {} |
| 65 | local drive = "" | 42 | local drive = "" |
| 66 | if pathname:match("^.:") then | 43 | if pathname:match("^.:") then |
| 67 | drive, pathname = pathname:match("^(.:)(.*)$") | 44 | drive, pathname = pathname:match("^(.:)(.*)$") |
| @@ -94,5 +71,26 @@ function dir.normalize(name) | |||
| 94 | return pathname | 71 | return pathname |
| 95 | end | 72 | end |
| 96 | 73 | ||
| 74 | |||
| 75 | --- Describe a path in a cross-platform way. | ||
| 76 | -- Use this function to avoid platform-specific directory | ||
| 77 | -- separators in other modules. Removes trailing slashes from | ||
| 78 | -- each component given, to avoid repeated separators. | ||
| 79 | -- Separators inside strings are kept, to handle URLs containing | ||
| 80 | -- protocols. | ||
| 81 | -- @param ... strings representing directories | ||
| 82 | -- @return string: a string with a platform-specific representation | ||
| 83 | -- of the path. | ||
| 84 | function dir.path(...: string): string | ||
| 85 | local t = {...} | ||
| 86 | while t[1] == "" do | ||
| 87 | table.remove(t, 1) | ||
| 88 | end | ||
| 89 | for i, c in ipairs(t) do | ||
| 90 | t[i] = unquote(c) | ||
| 91 | end | ||
| 92 | return dir.normalize(table.concat(t, "/")) | ||
| 93 | end | ||
| 94 | |||
| 97 | return dir | 95 | return dir |
| 98 | 96 | ||
