From 2d953d28ef16a5ad5b4f6c5053b4323181d43cd2 Mon Sep 17 00:00:00 2001 From: Robert Gates Date: Mon, 14 Mar 2022 09:29:41 +0000 Subject: [PATCH 1/2] Add support for adding just the gems in a particular bundle group --- .../bundle/create_bundle_build_file.rb | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/ruby/private/bundle/create_bundle_build_file.rb b/ruby/private/bundle/create_bundle_build_file.rb index 52626cf..cebf37b 100755 --- a/ruby/private/bundle/create_bundle_build_file.rb +++ b/ruby/private/bundle/create_bundle_build_file.rb @@ -44,6 +44,15 @@ ) GEM_TEMPLATE +GEM_GROUP = <<~GEM_GROUP + + ruby_library( + name = "{group_name}_group", + deps = {group_gems} + ) + +GEM_GROUP + ALL_GEMS = <<~ALL_GEMS ruby_library( name = "gems", @@ -211,7 +220,14 @@ def generate! bundle_lib_paths = [] bundle_binaries = {} # gem-name => [ gem's binaries ], ... gems = bundle.specs.map(&:name) - + bundle_deps = Bundler::Definition.build(gemfile_lock.chomp('.lock'), gemfile_lock, {}).dependencies + groups = bundle_deps.map{|dep| dep.groups}.flatten.uniq + gems_by_group = groups.map{ |g| {g => bundle_deps + .select{|dep| dep.groups.include?(g)} + .reject{|dep| dep.source.path? unless dep.source.nil?} + .map(&:name)} + } + .reduce Hash.new, :merge bundle.specs.each { |spec| register_gem(spec, template_out, bundle_lib_paths, bundle_binaries) } template_out.puts ALL_GEMS @@ -223,6 +239,13 @@ def generate! .gsub('{bundle_deps}', gems.map { |g| ":#{g}" }.to_s) .gsub('{exclude}', DEFAULT_EXCLUDES.to_s) + gems_by_group.each do |key, value| + template_out.puts GEM_GROUP + .gsub('{group_name}', key.to_s) + .gsub('{group_gems}', value.map{|s| s.prepend ':' unless s.start_with? ':'}.compact.to_s) + end + + ::File.open(build_file, 'w') { |f| f.puts template_out.string } end @@ -302,6 +325,10 @@ def find_bundle_binaries(gem_path) .map { |binary| "bin/#{binary}" } end + def gems_in_group(gems, group_name) + gems + end + def include_array(gem_name) (includes[gem_name] || []) end From 231a94c3ccbb1811ed7f72d1d8b7aee00d0fac3b Mon Sep 17 00:00:00 2001 From: Robert Gates Date: Tue, 12 Apr 2022 12:25:36 +0100 Subject: [PATCH 2/2] Rename gems_group --- ruby/private/bundle/create_bundle_build_file.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ruby/private/bundle/create_bundle_build_file.rb b/ruby/private/bundle/create_bundle_build_file.rb index cebf37b..8229426 100755 --- a/ruby/private/bundle/create_bundle_build_file.rb +++ b/ruby/private/bundle/create_bundle_build_file.rb @@ -45,12 +45,10 @@ GEM_TEMPLATE GEM_GROUP = <<~GEM_GROUP - ruby_library( - name = "{group_name}_group", + name = "gems_{group_name}_group", deps = {group_gems} ) - GEM_GROUP ALL_GEMS = <<~ALL_GEMS @@ -93,6 +91,10 @@ Dir.glob("lib/#{RbConfig::CONFIG['RUBY_INSTALL_NAME']}/#{ruby_version}/specifications/#{gem_name}-#{gem_version}*.gemspec").first end +EXTENSIONS_PATH = ->(ruby_version, gem_name, gem_version) do + Dir.glob("lib/#{RbConfig::CONFIG['RUBY_INSTALL_NAME']}/#{ruby_version}/extensions/*/#{gem_name}/**/*").first +end + require 'bundler' require 'json' require 'stringio'