aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/semver.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/semver.nix')
-rw-r--r--nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/semver.nix23
1 files changed, 15 insertions, 8 deletions
diff --git a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/semver.nix b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/semver.nix
index 620bb25ad97..784589a4ca4 100644
--- a/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/semver.nix
+++ b/nixpkgs/pkgs/development/tools/poetry2nix/poetry2nix/semver.nix
@@ -1,14 +1,8 @@
-{ lib }:
+{ lib, ireplace }:
let
inherit (builtins) elemAt match;
- # Replace a list entry at defined index with set value
- ireplace = idx: value: list: let
- inherit (builtins) genList length;
- in
- genList (i: if i == idx then value else (elemAt list i)) (length list);
-
operators = let
matchWildCard = s: match "([^\*])(\.[\*])" s;
mkComparison = ret: version: v: builtins.compareVersions version v == ret;
@@ -37,10 +31,23 @@ let
">=" = v: c: operators."==" v c || operators.">" v c;
"<=" = v: c: operators."==" v c || operators."<" v c;
# Semver specific operators
- "~" = mkIdxComparison 1; #
+ "~" = mkIdxComparison 1;
"^" = mkIdxComparison 0;
+ "~=" = v: c: let
+ # Prune constraint
+ parts = builtins.splitVersion c;
+ pruned = lib.take ((builtins.length parts) - 1) parts;
+ upper = builtins.toString (
+ (lib.toInt (builtins.elemAt pruned (builtins.length pruned - 1))) + 1
+ );
+ upperConstraint = builtins.concatStringsSep "." (ireplace (builtins.length pruned - 1) upper pruned);
+ in
+ operators.">=" v c && operators."<" v upperConstraint;
# Infix operators
"-" = version: v: operators.">=" version v.vl && operators."<=" version v.vu;
+ # Arbitrary equality clause, just run simple comparison
+ "===" = v: c: v == c;
+ #
};
re = {