diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/luarocks/queries-origianl.lua | 217 | ||||
| -rw-r--r-- | src/luarocks/queries.lua | 160 | ||||
| -rw-r--r-- | src/luarocks/queries.tl | 35 |
3 files changed, 324 insertions, 88 deletions
diff --git a/src/luarocks/queries-origianl.lua b/src/luarocks/queries-origianl.lua new file mode 100644 index 00000000..0c8790fa --- /dev/null +++ b/src/luarocks/queries-origianl.lua | |||
| @@ -0,0 +1,217 @@ | |||
| 1 | |||
| 2 | local queries = {} | ||
| 3 | |||
| 4 | local vers = require("luarocks.core.vers") | ||
| 5 | local util = require("luarocks.util") | ||
| 6 | local cfg = require("luarocks.core.cfg") | ||
| 7 | |||
| 8 | local query_mt = {} | ||
| 9 | |||
| 10 | query_mt.__index = query_mt | ||
| 11 | |||
| 12 | function query_mt.type() | ||
| 13 | return "query" | ||
| 14 | end | ||
| 15 | |||
| 16 | -- Fallback default value for the `arch` field, if not explicitly set. | ||
| 17 | query_mt.arch = { | ||
| 18 | src = true, | ||
| 19 | all = true, | ||
| 20 | rockspec = true, | ||
| 21 | installed = true, | ||
| 22 | -- [cfg.arch] = true, -- this is set later | ||
| 23 | } | ||
| 24 | |||
| 25 | -- Fallback default value for the `substring` field, if not explicitly set. | ||
| 26 | query_mt.substring = false | ||
| 27 | |||
| 28 | --- Convert the arch field of a query table to table format. | ||
| 29 | -- @param input string, table or nil | ||
| 30 | local function arch_to_table(input) | ||
| 31 | if type(input) == "table" then | ||
| 32 | return input | ||
| 33 | elseif type(input) == "string" then | ||
| 34 | local arch = {} | ||
| 35 | for a in input:gmatch("[%w_-]+") do | ||
| 36 | arch[a] = true | ||
| 37 | end | ||
| 38 | return arch | ||
| 39 | end | ||
| 40 | end | ||
| 41 | |||
| 42 | --- Prepare a query in dependency table format. | ||
| 43 | -- @param name string: the package name. | ||
| 44 | -- @param namespace string?: the package namespace. | ||
| 45 | -- @param version string?: the package version. | ||
| 46 | -- @param substring boolean?: match substrings of the name | ||
| 47 | -- (default is false, match full name) | ||
| 48 | -- @param arch string?: a string with pipe-separated accepted arch values | ||
| 49 | -- @param operator string?: operator for version matching (default is "==") | ||
| 50 | -- @return table: A query in table format | ||
| 51 | function queries.new(name, namespace, version, substring, arch, operator) | ||
| 52 | assert(type(name) == "string") | ||
| 53 | assert(type(namespace) == "string" or not namespace) | ||
| 54 | assert(type(version) == "string" or not version) | ||
| 55 | assert(type(substring) == "boolean" or not substring) | ||
| 56 | assert(type(arch) == "string" or not arch) | ||
| 57 | assert(type(operator) == "string" or not operator) | ||
| 58 | |||
| 59 | operator = operator or "==" | ||
| 60 | |||
| 61 | local self = { | ||
| 62 | name = name, | ||
| 63 | namespace = namespace, | ||
| 64 | constraints = {}, | ||
| 65 | substring = substring, | ||
| 66 | arch = arch_to_table(arch), | ||
| 67 | } | ||
| 68 | if version then | ||
| 69 | table.insert(self.constraints, { op = operator, version = vers.parse_version(version)}) | ||
| 70 | end | ||
| 71 | |||
| 72 | query_mt.arch[cfg.arch] = true | ||
| 73 | return setmetatable(self, query_mt) | ||
| 74 | end | ||
| 75 | |||
| 76 | -- Query for all packages | ||
| 77 | -- @param arch string (optional) | ||
| 78 | function queries.all(arch) | ||
| 79 | assert(type(arch) == "string" or not arch) | ||
| 80 | |||
| 81 | return queries.new("", nil, nil, true, arch) | ||
| 82 | end | ||
| 83 | |||
| 84 | do | ||
| 85 | local parse_constraints | ||
| 86 | do | ||
| 87 | local parse_constraint | ||
| 88 | do | ||
| 89 | local operators = { | ||
| 90 | ["=="] = "==", | ||
| 91 | ["~="] = "~=", | ||
| 92 | [">"] = ">", | ||
| 93 | ["<"] = "<", | ||
| 94 | [">="] = ">=", | ||
| 95 | ["<="] = "<=", | ||
| 96 | ["~>"] = "~>", | ||
| 97 | -- plus some convenience translations | ||
| 98 | [""] = "==", | ||
| 99 | ["="] = "==", | ||
| 100 | ["!="] = "~=" | ||
| 101 | } | ||
| 102 | |||
| 103 | --- Consumes a constraint from a string, converting it to table format. | ||
| 104 | -- For example, a string ">= 1.0, > 2.0" is converted to a table in the | ||
| 105 | -- format {op = ">=", version={1,0}} and the rest, "> 2.0", is returned | ||
| 106 | -- back to the caller. | ||
| 107 | -- @param input string: A list of constraints in string format. | ||
| 108 | -- @return (table, string) or nil: A table representing the same | ||
| 109 | -- constraints and the string with the unused input, or nil if the | ||
| 110 | -- input string is invalid. | ||
| 111 | parse_constraint = function(input) | ||
| 112 | assert(type(input) == "string") | ||
| 113 | |||
| 114 | local no_upgrade, op, version, rest = input:match("^(@?)([<>=~!]*)%s*([%w%.%_%-]+)[%s,]*(.*)") | ||
| 115 | local _op = operators[op] | ||
| 116 | version = vers.parse_version(version) | ||
| 117 | if not _op then | ||
| 118 | return nil, "Encountered bad constraint operator: '"..tostring(op).."' in '"..input.."'" | ||
| 119 | end | ||
| 120 | if not version then | ||
| 121 | return nil, "Could not parse version from constraint: '"..input.."'" | ||
| 122 | end | ||
| 123 | return { op = _op, version = version, no_upgrade = no_upgrade=="@" and true or nil }, rest | ||
| 124 | end | ||
| 125 | end | ||
| 126 | |||
| 127 | --- Convert a list of constraints from string to table format. | ||
| 128 | -- For example, a string ">= 1.0, < 2.0" is converted to a table in the format | ||
| 129 | -- {{op = ">=", version={1,0}}, {op = "<", version={2,0}}}. | ||
| 130 | -- Version tables use a metatable allowing later comparison through | ||
| 131 | -- relational operators. | ||
| 132 | -- @param input string: A list of constraints in string format. | ||
| 133 | -- @return table or nil: A table representing the same constraints, | ||
| 134 | -- or nil if the input string is invalid. | ||
| 135 | parse_constraints = function(input) | ||
| 136 | assert(type(input) == "string") | ||
| 137 | |||
| 138 | local constraints, oinput, constraint = {}, input | ||
| 139 | while #input > 0 do | ||
| 140 | constraint, input = parse_constraint(input) | ||
| 141 | if constraint then | ||
| 142 | table.insert(constraints, constraint) | ||
| 143 | else | ||
| 144 | return nil, "Failed to parse constraint '"..tostring(oinput).."' with error: ".. input | ||
| 145 | end | ||
| 146 | end | ||
| 147 | return constraints | ||
| 148 | end | ||
| 149 | end | ||
| 150 | |||
| 151 | --- Prepare a query in dependency table format. | ||
| 152 | -- @param depstr string: A dependency in string format | ||
| 153 | -- as entered in rockspec files. | ||
| 154 | -- @return table: A query in table format, or nil and an error message in case of errors. | ||
| 155 | function queries.from_dep_string(depstr) | ||
| 156 | assert(type(depstr) == "string") | ||
| 157 | |||
| 158 | local ns_name, rest = depstr:match("^%s*([a-zA-Z0-9%.%-%_]*/?[a-zA-Z0-9][a-zA-Z0-9%.%-%_]*)%s*([^/]*)") | ||
| 159 | if not ns_name then | ||
| 160 | return nil, "failed to extract dependency name from '"..depstr.."'" | ||
| 161 | end | ||
| 162 | |||
| 163 | ns_name = ns_name:lower() | ||
| 164 | |||
| 165 | local constraints, err = parse_constraints(rest) | ||
| 166 | if not constraints then | ||
| 167 | return nil, err | ||
| 168 | end | ||
| 169 | |||
| 170 | local name, namespace = util.split_namespace(ns_name) | ||
| 171 | |||
| 172 | local self = { | ||
| 173 | name = name, | ||
| 174 | namespace = namespace, | ||
| 175 | constraints = constraints, | ||
| 176 | } | ||
| 177 | |||
| 178 | query_mt.arch[cfg.arch] = true | ||
| 179 | return setmetatable(self, query_mt) | ||
| 180 | end | ||
| 181 | end | ||
| 182 | |||
| 183 | function queries.from_persisted_table(tbl) | ||
| 184 | query_mt.arch[cfg.arch] = true | ||
| 185 | return setmetatable(tbl, query_mt) | ||
| 186 | end | ||
| 187 | |||
| 188 | --- Build a string representation of a query package name. | ||
| 189 | -- Includes namespace, name and version, but not arch or constraints. | ||
| 190 | -- @param query table: a query table | ||
| 191 | -- @return string: a result such as `my_user/my_rock 1.0` or `my_rock`. | ||
| 192 | function query_mt:__tostring() | ||
| 193 | local out = {} | ||
| 194 | if self.namespace then | ||
| 195 | table.insert(out, self.namespace) | ||
| 196 | table.insert(out, "/") | ||
| 197 | end | ||
| 198 | table.insert(out, self.name) | ||
| 199 | |||
| 200 | if #self.constraints > 0 then | ||
| 201 | local pretty = {} | ||
| 202 | for _, c in ipairs(self.constraints) do | ||
| 203 | local v = c.version.string | ||
| 204 | if c.op == "==" then | ||
| 205 | table.insert(pretty, v) | ||
| 206 | else | ||
| 207 | table.insert(pretty, c.op .. " " .. v) | ||
| 208 | end | ||
| 209 | end | ||
| 210 | table.insert(out, " ") | ||
| 211 | table.insert(out, table.concat(pretty, ", ")) | ||
| 212 | end | ||
| 213 | |||
| 214 | return table.concat(out) | ||
| 215 | end | ||
| 216 | |||
| 217 | return queries | ||
diff --git a/src/luarocks/queries.lua b/src/luarocks/queries.lua index 0c8790fa..89cd1799 100644 --- a/src/luarocks/queries.lua +++ b/src/luarocks/queries.lua | |||
| @@ -1,32 +1,45 @@ | |||
| 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 ipairs = _tl_compat and _tl_compat.ipairs or ipairs; local string = _tl_compat and _tl_compat.string or string; local table = _tl_compat and _tl_compat.table or table | ||
| 2 | local queries = {Query = {}, } | ||
| 3 | |||
| 4 | |||
| 5 | |||
| 6 | |||
| 7 | |||
| 8 | |||
| 9 | |||
| 1 | 10 | ||
| 2 | local queries = {} | ||
| 3 | 11 | ||
| 4 | local vers = require("luarocks.core.vers") | 12 | local vers = require("luarocks.core.vers") |
| 5 | local util = require("luarocks.util") | 13 | local util = require("luarocks.util") |
| 6 | local cfg = require("luarocks.core.cfg") | 14 | local cfg = require("luarocks.core.cfg") |
| 7 | 15 | ||
| 16 | |||
| 17 | |||
| 18 | |||
| 19 | |||
| 20 | |||
| 8 | local query_mt = {} | 21 | local query_mt = {} |
| 9 | 22 | ||
| 10 | query_mt.__index = query_mt | 23 | query_mt.__index = queries.Query |
| 11 | 24 | ||
| 12 | function query_mt.type() | 25 | function queries.Query.type() |
| 13 | return "query" | 26 | return "query" |
| 14 | end | 27 | end |
| 15 | 28 | ||
| 16 | -- Fallback default value for the `arch` field, if not explicitly set. | 29 | |
| 17 | query_mt.arch = { | 30 | queries.Query.arch = { |
| 18 | src = true, | 31 | src = true, |
| 19 | all = true, | 32 | all = true, |
| 20 | rockspec = true, | 33 | rockspec = true, |
| 21 | installed = true, | 34 | installed = true, |
| 22 | -- [cfg.arch] = true, -- this is set later | 35 | |
| 23 | } | 36 | } |
| 24 | 37 | ||
| 25 | -- Fallback default value for the `substring` field, if not explicitly set. | ||
| 26 | query_mt.substring = false | ||
| 27 | 38 | ||
| 28 | --- Convert the arch field of a query table to table format. | 39 | queries.Query.substring = false |
| 29 | -- @param input string, table or nil | 40 | |
| 41 | |||
| 42 | |||
| 30 | local function arch_to_table(input) | 43 | local function arch_to_table(input) |
| 31 | if type(input) == "table" then | 44 | if type(input) == "table" then |
| 32 | return input | 45 | return input |
| @@ -39,22 +52,21 @@ local function arch_to_table(input) | |||
| 39 | end | 52 | end |
| 40 | end | 53 | end |
| 41 | 54 | ||
| 42 | --- Prepare a query in dependency table format. | 55 | |
| 43 | -- @param name string: the package name. | 56 | |
| 44 | -- @param namespace string?: the package namespace. | 57 | |
| 45 | -- @param version string?: the package version. | 58 | |
| 46 | -- @param substring boolean?: match substrings of the name | 59 | |
| 47 | -- (default is false, match full name) | 60 | |
| 48 | -- @param arch string?: a string with pipe-separated accepted arch values | 61 | |
| 49 | -- @param operator string?: operator for version matching (default is "==") | 62 | |
| 50 | -- @return table: A query in table format | 63 | |
| 51 | function queries.new(name, namespace, version, substring, arch, operator) | 64 | function queries.new(name, namespace, version, substring, arch, operator) |
| 52 | assert(type(name) == "string") | 65 | |
| 53 | assert(type(namespace) == "string" or not namespace) | 66 | |
| 54 | assert(type(version) == "string" or not version) | 67 | |
| 55 | assert(type(substring) == "boolean" or not substring) | 68 | |
| 56 | assert(type(arch) == "string" or not arch) | 69 | |
| 57 | assert(type(operator) == "string" or not operator) | ||
| 58 | 70 | ||
| 59 | operator = operator or "==" | 71 | operator = operator or "==" |
| 60 | 72 | ||
| @@ -66,17 +78,17 @@ function queries.new(name, namespace, version, substring, arch, operator) | |||
| 66 | arch = arch_to_table(arch), | 78 | arch = arch_to_table(arch), |
| 67 | } | 79 | } |
| 68 | if version then | 80 | if version then |
| 69 | table.insert(self.constraints, { op = operator, version = vers.parse_version(version)}) | 81 | table.insert(self.constraints, { op = operator, version = vers.parse_version(version) }) |
| 70 | end | 82 | end |
| 71 | 83 | ||
| 72 | query_mt.arch[cfg.arch] = true | 84 | queries.Query.arch[cfg.arch] = true |
| 73 | return setmetatable(self, query_mt) | 85 | return setmetatable(self, query_mt) |
| 74 | end | 86 | end |
| 75 | 87 | ||
| 76 | -- Query for all packages | 88 | |
| 77 | -- @param arch string (optional) | 89 | |
| 78 | function queries.all(arch) | 90 | function queries.all(arch) |
| 79 | assert(type(arch) == "string" or not arch) | 91 | |
| 80 | 92 | ||
| 81 | return queries.new("", nil, nil, true, arch) | 93 | return queries.new("", nil, nil, true, arch) |
| 82 | end | 94 | end |
| @@ -94,70 +106,68 @@ do | |||
| 94 | [">="] = ">=", | 106 | [">="] = ">=", |
| 95 | ["<="] = "<=", | 107 | ["<="] = "<=", |
| 96 | ["~>"] = "~>", | 108 | ["~>"] = "~>", |
| 97 | -- plus some convenience translations | 109 | |
| 98 | [""] = "==", | 110 | [""] = "==", |
| 99 | ["="] = "==", | 111 | ["="] = "==", |
| 100 | ["!="] = "~=" | 112 | ["!="] = "~=", |
| 101 | } | 113 | } |
| 102 | 114 | ||
| 103 | --- Consumes a constraint from a string, converting it to table format. | 115 | |
| 104 | -- For example, a string ">= 1.0, > 2.0" is converted to a table in the | 116 | |
| 105 | -- format {op = ">=", version={1,0}} and the rest, "> 2.0", is returned | 117 | |
| 106 | -- back to the caller. | 118 | |
| 107 | -- @param input string: A list of constraints in string format. | 119 | |
| 108 | -- @return (table, string) or nil: A table representing the same | 120 | |
| 109 | -- constraints and the string with the unused input, or nil if the | 121 | |
| 110 | -- input string is invalid. | 122 | |
| 111 | parse_constraint = function(input) | 123 | parse_constraint = function(input) |
| 112 | assert(type(input) == "string") | ||
| 113 | 124 | ||
| 114 | local no_upgrade, op, version, rest = input:match("^(@?)([<>=~!]*)%s*([%w%.%_%-]+)[%s,]*(.*)") | 125 | local no_upgrade, op, versionstr, rest = input:match("^(@?)([<>=~!]*)%s*([%w%.%_%-]+)[%s,]*(.*)") |
| 115 | local _op = operators[op] | 126 | local _op = operators[op] |
| 116 | version = vers.parse_version(version) | 127 | local version = vers.parse_version(versionstr) |
| 117 | if not _op then | 128 | if not _op then |
| 118 | return nil, "Encountered bad constraint operator: '"..tostring(op).."' in '"..input.."'" | 129 | return nil, "Encountered bad constraint operator: '" .. tostring(op) .. "' in '" .. input .. "'" |
| 119 | end | 130 | end |
| 120 | if not version then | 131 | if not version then |
| 121 | return nil, "Could not parse version from constraint: '"..input.."'" | 132 | return nil, "Could not parse version from constraint: '" .. input .. "'" |
| 122 | end | 133 | end |
| 123 | return { op = _op, version = version, no_upgrade = no_upgrade=="@" and true or nil }, rest | 134 | return { op = _op, version = version, no_upgrade = no_upgrade == "@" and true or nil }, rest |
| 124 | end | 135 | end |
| 125 | end | 136 | end |
| 126 | 137 | ||
| 127 | --- Convert a list of constraints from string to table format. | 138 | |
| 128 | -- For example, a string ">= 1.0, < 2.0" is converted to a table in the format | 139 | |
| 129 | -- {{op = ">=", version={1,0}}, {op = "<", version={2,0}}}. | 140 | |
| 130 | -- Version tables use a metatable allowing later comparison through | 141 | |
| 131 | -- relational operators. | 142 | |
| 132 | -- @param input string: A list of constraints in string format. | 143 | |
| 133 | -- @return table or nil: A table representing the same constraints, | 144 | |
| 134 | -- or nil if the input string is invalid. | 145 | |
| 135 | parse_constraints = function(input) | 146 | parse_constraints = function(input) |
| 136 | assert(type(input) == "string") | ||
| 137 | 147 | ||
| 138 | local constraints, oinput, constraint = {}, input | 148 | local constraints, oinput = {}, input |
| 149 | local constraint | ||
| 139 | while #input > 0 do | 150 | while #input > 0 do |
| 140 | constraint, input = parse_constraint(input) | 151 | constraint, input = parse_constraint(input) |
| 141 | if constraint then | 152 | if constraint then |
| 142 | table.insert(constraints, constraint) | 153 | table.insert(constraints, constraint) |
| 143 | else | 154 | else |
| 144 | return nil, "Failed to parse constraint '"..tostring(oinput).."' with error: ".. input | 155 | return nil, "Failed to parse constraint '" .. tostring(oinput) .. "' with error: " .. input |
| 145 | end | 156 | end |
| 146 | end | 157 | end |
| 147 | return constraints | 158 | return constraints |
| 148 | end | 159 | end |
| 149 | end | 160 | end |
| 150 | 161 | ||
| 151 | --- Prepare a query in dependency table format. | 162 | |
| 152 | -- @param depstr string: A dependency in string format | 163 | |
| 153 | -- as entered in rockspec files. | 164 | |
| 154 | -- @return table: A query in table format, or nil and an error message in case of errors. | 165 | |
| 155 | function queries.from_dep_string(depstr) | 166 | function queries.from_dep_string(depstr) |
| 156 | assert(type(depstr) == "string") | ||
| 157 | 167 | ||
| 158 | local ns_name, rest = depstr:match("^%s*([a-zA-Z0-9%.%-%_]*/?[a-zA-Z0-9][a-zA-Z0-9%.%-%_]*)%s*([^/]*)") | 168 | local ns_name, rest = depstr:match("^%s*([a-zA-Z0-9%.%-%_]*/?[a-zA-Z0-9][a-zA-Z0-9%.%-%_]*)%s*([^/]*)") |
| 159 | if not ns_name then | 169 | if not ns_name then |
| 160 | return nil, "failed to extract dependency name from '"..depstr.."'" | 170 | return nil, "failed to extract dependency name from '" .. depstr .. "'" |
| 161 | end | 171 | end |
| 162 | 172 | ||
| 163 | ns_name = ns_name:lower() | 173 | ns_name = ns_name:lower() |
| @@ -175,21 +185,22 @@ do | |||
| 175 | constraints = constraints, | 185 | constraints = constraints, |
| 176 | } | 186 | } |
| 177 | 187 | ||
| 178 | query_mt.arch[cfg.arch] = true | 188 | queries.Query.arch[cfg.arch] = true |
| 179 | return setmetatable(self, query_mt) | 189 | return setmetatable(self, query_mt) |
| 180 | end | 190 | end |
| 181 | end | 191 | end |
| 182 | 192 | ||
| 183 | function queries.from_persisted_table(tbl) | 193 | function queries.from_persisted_table(tbl) |
| 184 | query_mt.arch[cfg.arch] = true | 194 | queries.Query.arch[cfg.arch] = true |
| 185 | return setmetatable(tbl, query_mt) | 195 | return setmetatable(tbl, query_mt) |
| 186 | end | 196 | end |
| 187 | 197 | ||
| 188 | --- Build a string representation of a query package name. | 198 | |
| 189 | -- Includes namespace, name and version, but not arch or constraints. | 199 | |
| 190 | -- @param query table: a query table | 200 | |
| 191 | -- @return string: a result such as `my_user/my_rock 1.0` or `my_rock`. | 201 | |
| 192 | function query_mt:__tostring() | 202 | function query_mt.__tostring(self) |
| 203 | |||
| 193 | local out = {} | 204 | local out = {} |
| 194 | if self.namespace then | 205 | if self.namespace then |
| 195 | table.insert(out, self.namespace) | 206 | table.insert(out, self.namespace) |
| @@ -200,7 +211,14 @@ function query_mt:__tostring() | |||
| 200 | if #self.constraints > 0 then | 211 | if #self.constraints > 0 then |
| 201 | local pretty = {} | 212 | local pretty = {} |
| 202 | for _, c in ipairs(self.constraints) do | 213 | for _, c in ipairs(self.constraints) do |
| 203 | local v = c.version.string | 214 | local cv = c.version |
| 215 | |||
| 216 | local v | ||
| 217 | if type(cv) == "table" then | ||
| 218 | v = cv.string | ||
| 219 | else | ||
| 220 | v = cv | ||
| 221 | end | ||
| 204 | if c.op == "==" then | 222 | if c.op == "==" then |
| 205 | table.insert(pretty, v) | 223 | table.insert(pretty, v) |
| 206 | else | 224 | else |
diff --git a/src/luarocks/queries.tl b/src/luarocks/queries.tl index b5996dbe..15394c4d 100644 --- a/src/luarocks/queries.tl +++ b/src/luarocks/queries.tl | |||
| @@ -1,15 +1,9 @@ | |||
| 1 | 1 | ||
| 2 | local record queries | 2 | local record queries |
| 3 | record Constraint | ||
| 4 | version: vers.Version | ||
| 5 | op: string | ||
| 6 | no_upgrade: boolean | ||
| 7 | end | ||
| 8 | |||
| 9 | record Query | 3 | record Query |
| 10 | name: string | 4 | name: string |
| 11 | namespace: string | 5 | namespace: string |
| 12 | constraints: {Constraint} | 6 | constraints: {vers.Constraint} |
| 13 | substring: boolean | 7 | substring: boolean |
| 14 | arch: {string: boolean} | 8 | arch: {string: boolean} |
| 15 | end | 9 | end |
| @@ -22,18 +16,18 @@ local cfg = require("luarocks.core.cfg") | |||
| 22 | -- local type Config = cfg | 16 | -- local type Config = cfg |
| 23 | 17 | ||
| 24 | local type Query = queries.Query | 18 | local type Query = queries.Query |
| 25 | local type Constraint = queries.Constraint | 19 | local type Constraint = vers.Constraint |
| 26 | 20 | ||
| 27 | local query_mt: metatable<Query> = {} | 21 | local query_mt: metatable<Query> = {} |
| 28 | 22 | ||
| 29 | query_mt.__index = query_mt | 23 | query_mt.__index = queries.Query |
| 30 | 24 | ||
| 31 | function query_mt.type() | 25 | function queries.Query.type(): string --? remove later |
| 32 | return "query" | 26 | return "query" |
| 33 | end | 27 | end |
| 34 | 28 | ||
| 35 | -- Fallback default value for the `arch` field, if not explicitly set. | 29 | -- Fallback default value for the `arch` field, if not explicitly set. |
| 36 | query_mt.arch = { | 30 | queries.Query.arch = { |
| 37 | src = true, | 31 | src = true, |
| 38 | all = true, | 32 | all = true, |
| 39 | rockspec = true, | 33 | rockspec = true, |
| @@ -42,7 +36,7 @@ query_mt.arch = { | |||
| 42 | } | 36 | } |
| 43 | 37 | ||
| 44 | -- Fallback default value for the `substring` field, if not explicitly set. | 38 | -- Fallback default value for the `substring` field, if not explicitly set. |
| 45 | query_mt.substring = false | 39 | queries.Query.substring = false |
| 46 | 40 | ||
| 47 | --- Convert the arch field of a query table to table format. | 41 | --- Convert the arch field of a query table to table format. |
| 48 | -- @param input string, table or nil | 42 | -- @param input string, table or nil |
| @@ -87,7 +81,7 @@ function queries.new(name: string, namespace?: string, version?: string, substri | |||
| 87 | table.insert(self.constraints, { op = operator, version = vers.parse_version(version)}) | 81 | table.insert(self.constraints, { op = operator, version = vers.parse_version(version)}) |
| 88 | end | 82 | end |
| 89 | 83 | ||
| 90 | query_mt.arch[cfg.arch] = true | 84 | queries.Query.arch[cfg.arch] = true |
| 91 | return setmetatable(self, query_mt) | 85 | return setmetatable(self, query_mt) |
| 92 | end | 86 | end |
| 93 | 87 | ||
| @@ -191,13 +185,13 @@ do | |||
| 191 | constraints = constraints, | 185 | constraints = constraints, |
| 192 | } | 186 | } |
| 193 | 187 | ||
| 194 | query_mt.arch[cfg.arch] = true | 188 | queries.Query.arch[cfg.arch] = true |
| 195 | return setmetatable(self, query_mt) | 189 | return setmetatable(self, query_mt) |
| 196 | end | 190 | end |
| 197 | end | 191 | end |
| 198 | 192 | ||
| 199 | function queries.from_persisted_table(tbl: Query): Query | 193 | function queries.from_persisted_table(tbl: Query): Query |
| 200 | query_mt.arch[cfg.arch] = true | 194 | queries.Query.arch[cfg.arch] = true |
| 201 | return setmetatable(tbl, query_mt) | 195 | return setmetatable(tbl, query_mt) |
| 202 | end | 196 | end |
| 203 | 197 | ||
| @@ -217,7 +211,14 @@ function query_mt.__tostring(self: Query): string | |||
| 217 | if #self.constraints > 0 then | 211 | if #self.constraints > 0 then |
| 218 | local pretty = {} | 212 | local pretty = {} |
| 219 | for _, c in ipairs(self.constraints) do | 213 | for _, c in ipairs(self.constraints) do |
| 220 | local v = c.version.string | 214 | local cv = c.version |
| 215 | -- local v = cv is vers.Version and cv.string or cv --TEAL BUG | ||
| 216 | local v: string | ||
| 217 | if cv is vers.Version then | ||
| 218 | v = cv.string | ||
| 219 | else | ||
| 220 | v = cv | ||
| 221 | end | ||
| 221 | if c.op == "==" then | 222 | if c.op == "==" then |
| 222 | table.insert(pretty, v) | 223 | table.insert(pretty, v) |
| 223 | else | 224 | else |
| @@ -231,4 +232,4 @@ function query_mt.__tostring(self: Query): string | |||
| 231 | return table.concat(out) | 232 | return table.concat(out) |
| 232 | end | 233 | end |
| 233 | 234 | ||
| 234 | return queries --! src/luarocks/queries.tl:32 \ No newline at end of file | 235 | return queries \ No newline at end of file |
