diff options
| author | William Boman <william@redwill.se> | 2025-08-02 00:19:10 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-01 22:19:10 +0000 |
| commit | 9e25c98d4826998460926f8c5c2284848d80ae89 (patch) | |
| tree | 6ba2cce1709bfb1af4d1fd6f48c155ed69b14106 /lua | |
| parent | fix(ui): only set border to none if `'winborder'` doesn't exist (#1984) (diff) | |
| download | mason-9e25c98d4826998460926f8c5c2284848d80ae89.tar mason-9e25c98d4826998460926f8c5c2284848d80ae89.tar.gz mason-9e25c98d4826998460926f8c5c2284848d80ae89.tar.bz2 mason-9e25c98d4826998460926f8c5c2284848d80ae89.tar.lz mason-9e25c98d4826998460926f8c5c2284848d80ae89.tar.xz mason-9e25c98d4826998460926f8c5c2284848d80ae89.tar.zst mason-9e25c98d4826998460926f8c5c2284848d80ae89.zip | |
fix(pypi): add support for "compatible release" (~=) PEP440 expressions (#2000)
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/mason-core/pep440/init.lua | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/lua/mason-core/pep440/init.lua b/lua/mason-core/pep440/init.lua index 0141c501..526bb87e 100644 --- a/lua/mason-core/pep440/init.lua +++ b/lua/mason-core/pep440/init.lua @@ -1,4 +1,3 @@ --- Function to split a version string into its components local function split_version(version) local parts = {} for part in version:gmatch "[^.]+" do @@ -7,7 +6,6 @@ local function split_version(version) return parts end --- Function to compare two versions local function compare_versions(version1, version2) local v1_parts = split_version(version1) local v2_parts = split_version(version2) @@ -27,9 +25,8 @@ local function compare_versions(version1, version2) return 0 end --- Function to check a version against a single specifier local function check_single_specifier(version, specifier) - local operator, spec_version = specifier:match "^([<>=!]+)%s*(.+)$" + local operator, spec_version = specifier:match "^([<>=!~]+)%s*(.+)$" local comp_result = compare_versions(version, spec_version) if operator == "==" then @@ -44,12 +41,23 @@ local function check_single_specifier(version, specifier) return comp_result >= 0 elseif operator == ">" then return comp_result > 0 + elseif operator == "~=" then + if comp_result < 0 then + return false + end + local spec_version_components = split_version(spec_version) + local version_components = split_version(version) + for i = 1, #spec_version_components - 1 do + if spec_version_components[i] ~= version_components[i] then + return false + end + end + return true else - error("Invalid operator in version specifier: " .. operator) + error("Unknown operator in version specifier: " .. operator) end end --- Function to check a version against multiple specifiers local function check_version(version, specifiers) for specifier in specifiers:gmatch "[^,]+" do if not check_single_specifier(version, specifier:match "^%s*(.-)%s*$") then |
