diff options
author | Alyssa Ross <hi@alyssa.is> | 2018-12-12 23:51:52 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-12 23:51:52 +0000 |
commit | b450083ee31f366273e36b7c374caae9dad840ef (patch) | |
tree | 0516b5136732cf16b956346d66677ac3f6dd281f /pkgs | |
parent | 5feba458a260e9f9821bf373eb83280d08b1a657 (diff) | |
parent | 26053cae74248f77bf34fb2a3f0efa0ec2af822f (diff) | |
download | nixlib-b450083ee31f366273e36b7c374caae9dad840ef.tar nixlib-b450083ee31f366273e36b7c374caae9dad840ef.tar.gz nixlib-b450083ee31f366273e36b7c374caae9dad840ef.tar.bz2 nixlib-b450083ee31f366273e36b7c374caae9dad840ef.tar.lz nixlib-b450083ee31f366273e36b7c374caae9dad840ef.tar.xz nixlib-b450083ee31f366273e36b7c374caae9dad840ef.tar.zst nixlib-b450083ee31f366273e36b7c374caae9dad840ef.zip |
Merge pull request #51884 from alyssais/bundlerEnv-groups
bundlerEnv: improve handling of groups
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/development/ruby-modules/bundled-common/default.nix | 2 | ||||
-rw-r--r-- | pkgs/development/ruby-modules/bundled-common/functions.nix | 28 |
2 files changed, 23 insertions, 7 deletions
diff --git a/pkgs/development/ruby-modules/bundled-common/default.nix b/pkgs/development/ruby-modules/bundled-common/default.nix index 1b64456fb204..c31dfb63b3cd 100644 --- a/pkgs/development/ruby-modules/bundled-common/default.nix +++ b/pkgs/development/ruby-modules/bundled-common/default.nix @@ -17,7 +17,7 @@ , postBuild ? null , document ? [] , meta ? {} -, groups ? ["default"] +, groups ? null , ignoreCollisions ? false , buildInputs ? [] , ... diff --git a/pkgs/development/ruby-modules/bundled-common/functions.nix b/pkgs/development/ruby-modules/bundled-common/functions.nix index b8e666a92f9a..6324f27e9faf 100644 --- a/pkgs/development/ruby-modules/bundled-common/functions.nix +++ b/pkgs/development/ruby-modules/bundled-common/functions.nix @@ -1,5 +1,10 @@ { lib, gemConfig, ... }: -rec { + +let + inherit (lib) attrValues concatMap converge filterAttrs getAttrs + intersectLists; + +in rec { bundlerFiles = { gemfile ? null , lockfile ? null @@ -22,7 +27,19 @@ rec { else gemset; }; - filterGemset = {ruby, groups,...}: gemset: lib.filterAttrs (name: attrs: platformMatches ruby attrs && groupMatches groups attrs) gemset; + filterGemset = { ruby, groups, ... }: gemset: + let + platformGems = filterAttrs (_: platformMatches ruby) gemset; + directlyMatchingGems = filterAttrs (_: groupMatches groups) platformGems; + + expandDependencies = gems: + let + depNames = concatMap (gem: gem.dependencies or []) (attrValues gems); + deps = getAttrs depNames platformGems; + in + gems // deps; + in + converge expandDependencies directlyMatchingGems; platformMatches = {rubyEngine, version, ...}: attrs: ( !(attrs ? "platforms") || @@ -33,10 +50,9 @@ rec { ) attrs.platforms ); - groupMatches = groups: attrs: ( - !(attrs ? "groups") || - builtins.any (gemGroup: builtins.any (group: group == gemGroup) groups) attrs.groups - ); + groupMatches = groups: attrs: + groups == null || !(attrs ? "groups") || + (intersectLists (groups ++ [ "default" ]) attrs.groups) != []; applyGemConfigs = attrs: (if gemConfig ? "${attrs.gemName}" |