| 
									
										
										
										
											2020-11-25 17:03:23 +01:00
										 |  |  | # typed: true | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | require "dependable" | 
					
						
							|  |  |  | require "dependency" | 
					
						
							|  |  |  | require "dependencies" | 
					
						
							|  |  |  | require "build_environment" | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | # A base class for non-formula requirements needed by formulae. | 
					
						
							| 
									
										
										
										
											2020-08-18 03:02:33 +02:00
										 |  |  | # A fatal requirement is one that will fail the build if it is not present. | 
					
						
							|  |  |  | # By default, requirements are non-fatal. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # @api private | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  | class Requirement | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |   extend T::Sig | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   include Dependable | 
					
						
							| 
									
										
										
										
											2021-03-19 03:21:27 +00:00
										 |  |  |   extend Cachable | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-14 13:27:43 +00:00
										 |  |  |   attr_reader :tags, :name, :cask, :download | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def initialize(tags = []) | 
					
						
							| 
									
										
										
										
											2019-01-17 09:57:50 +00:00
										 |  |  |     @cask = self.class.cask | 
					
						
							|  |  |  |     @download = self.class.download | 
					
						
							| 
									
										
										
										
											2014-12-25 20:43:40 +00:00
										 |  |  |     tags.each do |tag| | 
					
						
							|  |  |  |       next unless tag.is_a? Hash | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-25 20:43:40 +00:00
										 |  |  |       @cask ||= tag[:cask] | 
					
						
							|  |  |  |       @download ||= tag[:download] | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-05-06 16:08:50 -05:00
										 |  |  |     @tags = tags | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |     @tags << :build if self.class.build | 
					
						
							| 
									
										
										
										
											2013-02-12 16:24:30 -06:00
										 |  |  |     @name ||= infer_name | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-14 19:47:19 +00:00
										 |  |  |   def option_names | 
					
						
							|  |  |  |     [name] | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   # The message to show when the requirement is not met. | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |   sig { returns(String) } | 
					
						
							| 
									
										
										
										
											2014-12-25 20:43:40 +00:00
										 |  |  |   def message | 
					
						
							| 
									
										
										
										
											2016-07-10 13:53:03 +01:00
										 |  |  |     _, _, class_name = self.class.to_s.rpartition "::" | 
					
						
							|  |  |  |     s = "#{class_name} unsatisfied!\n" | 
					
						
							| 
									
										
										
										
											2014-12-25 20:43:40 +00:00
										 |  |  |     if cask | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |       s += <<~EOS | 
					
						
							| 
									
										
										
										
											2020-11-18 08:10:21 +01:00
										 |  |  |         You can install the necessary cask with: | 
					
						
							|  |  |  |           brew install --cask #{cask} | 
					
						
							| 
									
										
										
										
											2014-12-25 20:43:40 +00:00
										 |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if download | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |       s += <<~EOS | 
					
						
							| 
									
										
										
										
											2014-12-25 20:43:40 +00:00
										 |  |  |         You can download from: | 
					
						
							| 
									
										
										
										
											2020-11-01 12:26:18 -05:00
										 |  |  |           #{Formatter.url(download)} | 
					
						
							| 
									
										
										
										
											2014-12-25 20:43:40 +00:00
										 |  |  |       EOS | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     s | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-18 21:42:43 -04:00
										 |  |  |   # Overriding {#satisfied?} is unsupported. | 
					
						
							| 
									
										
										
										
											2013-06-02 17:14:42 -05:00
										 |  |  |   # Pass a block or boolean to the satisfy DSL method instead. | 
					
						
							| 
									
										
										
										
											2020-07-28 14:08:40 +02:00
										 |  |  |   def satisfied?(env: nil, cc: nil, build_bottle: false, bottle_arch: nil) | 
					
						
							| 
									
										
										
										
											2018-01-23 11:26:00 +00:00
										 |  |  |     satisfy = self.class.satisfy | 
					
						
							|  |  |  |     return true unless satisfy | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-28 14:08:40 +02:00
										 |  |  |     @satisfied_result = | 
					
						
							|  |  |  |       satisfy.yielder(env: env, cc: cc, build_bottle: build_bottle, bottle_arch: bottle_arch) do |p| | 
					
						
							|  |  |  |         instance_eval(&p) | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2018-01-23 11:26:00 +00:00
										 |  |  |     return false unless @satisfied_result | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-09 22:44:01 +00:00
										 |  |  |     true | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-18 21:42:43 -04:00
										 |  |  |   # Overriding {#fatal?} is unsupported. | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   # Pass a boolean to the fatal DSL method instead. | 
					
						
							|  |  |  |   def fatal? | 
					
						
							|  |  |  |     self.class.fatal || false | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-09 22:44:01 +00:00
										 |  |  |   def satisfied_result_parent | 
					
						
							|  |  |  |     return unless @satisfied_result.is_a?(Pathname) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-28 19:48:44 +01:00
										 |  |  |     parent = @satisfied_result.resolved_path.parent | 
					
						
							| 
									
										
										
										
											2020-11-16 22:18:56 +01:00
										 |  |  |     if parent.to_s =~ %r{^#{Regexp.escape(HOMEBREW_CELLAR)}/([\w+-.@]+)/[^/]+/(s?bin)/?$}o | 
					
						
							| 
									
										
										
										
											2017-10-28 19:48:44 +01:00
										 |  |  |       parent = HOMEBREW_PREFIX/"opt/#{Regexp.last_match(1)}/#{Regexp.last_match(2)}" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     parent | 
					
						
							| 
									
										
										
										
											2017-01-09 22:44:01 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-18 21:42:43 -04:00
										 |  |  |   # Overriding {#modify_build_environment} is unsupported. | 
					
						
							| 
									
										
										
										
											2016-01-13 03:01:26 +09:00
										 |  |  |   # Pass a block to the env DSL method instead. | 
					
						
							| 
									
										
										
										
											2020-07-28 14:08:40 +02:00
										 |  |  |   def modify_build_environment(env: nil, cc: nil, build_bottle: false, bottle_arch: nil) | 
					
						
							|  |  |  |     satisfied?(env: env, cc: cc, build_bottle: build_bottle, bottle_arch: bottle_arch) | 
					
						
							| 
									
										
										
										
											2014-07-07 21:32:35 -05:00
										 |  |  |     instance_eval(&env_proc) if env_proc | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # XXX If the satisfy block returns a Pathname, then make sure that it | 
					
						
							|  |  |  |     # remains available on the PATH. This makes requirements like | 
					
						
							|  |  |  |     #   satisfy { which("executable") } | 
					
						
							|  |  |  |     # work, even under superenv where "executable" wouldn't normally be on the | 
					
						
							|  |  |  |     # PATH. | 
					
						
							| 
									
										
										
										
											2017-01-09 22:44:01 +00:00
										 |  |  |     parent = satisfied_result_parent | 
					
						
							|  |  |  |     return unless parent | 
					
						
							| 
									
										
										
										
											2017-10-28 19:58:58 +01:00
										 |  |  |     return if ["#{HOMEBREW_PREFIX}/bin", "#{HOMEBREW_PREFIX}/bin"].include?(parent.to_s) | 
					
						
							| 
									
										
										
										
											2017-04-28 12:39:00 +02:00
										 |  |  |     return if PATH.new(ENV["PATH"]).include?(parent.to_s) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-28 19:48:21 +01:00
										 |  |  |     ENV.prepend_path("PATH", parent) | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def env | 
					
						
							| 
									
										
										
										
											2014-07-07 21:32:35 -05:00
										 |  |  |     self.class.env | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-07 21:32:35 -05:00
										 |  |  |   def env_proc | 
					
						
							|  |  |  |     self.class.env_proc | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-12 17:35:16 -06:00
										 |  |  |   def ==(other) | 
					
						
							| 
									
										
										
										
											2013-06-27 01:18:32 -05:00
										 |  |  |     instance_of?(other.class) && name == other.name && tags == other.tags | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-09-23 18:13:48 +02:00
										 |  |  |   alias eql? == | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def hash | 
					
						
							| 
									
										
										
										
											2014-11-12 17:33:07 -06:00
										 |  |  |     name.hash ^ tags.hash | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |   sig { returns(String) } | 
					
						
							| 
									
										
										
										
											2013-06-07 22:24:36 -05:00
										 |  |  |   def inspect | 
					
						
							| 
									
										
										
										
											2020-11-01 12:22:56 -05:00
										 |  |  |     "#<#{self.class.name}: #{tags.inspect}>" | 
					
						
							| 
									
										
										
										
											2013-06-07 22:24:36 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-18 00:37:02 -04:00
										 |  |  |   def display_s | 
					
						
							| 
									
										
										
										
											2020-11-01 12:02:13 -05:00
										 |  |  |     name.capitalize | 
					
						
							| 
									
										
										
										
											2016-09-18 00:37:02 -04:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-19 17:12:32 +01:00
										 |  |  |   def mktemp(&block) | 
					
						
							|  |  |  |     Mktemp.new(name).run(&block) | 
					
						
							| 
									
										
										
										
											2018-07-14 09:17:04 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-12 16:24:30 -06:00
										 |  |  |   def infer_name | 
					
						
							| 
									
										
										
										
											2014-06-12 16:12:21 -05:00
										 |  |  |     klass = self.class.name || self.class.to_s | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     klass.sub!(/(Dependency|Requirement)$/, "") | 
					
						
							|  |  |  |     klass.sub!(/^(\w+::)*/, "") | 
					
						
							| 
									
										
										
										
											2020-07-27 19:12:16 -04:00
										 |  |  |     return klass.downcase if klass.present? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return @cask if @cask.present? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     "" | 
					
						
							| 
									
										
										
										
											2013-02-12 16:24:30 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-19 12:33:00 -05:00
										 |  |  |   def which(cmd) | 
					
						
							| 
									
										
										
										
											2017-04-27 10:44:44 +02:00
										 |  |  |     super(cmd, PATH.new(ORIGINAL_PATHS)) | 
					
						
							| 
									
										
										
										
											2013-08-19 12:33:00 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-02 23:08:51 +08:00
										 |  |  |   def which_all(cmd) | 
					
						
							| 
									
										
										
										
											2017-04-27 10:44:44 +02:00
										 |  |  |     super(cmd, PATH.new(ORIGINAL_PATHS)) | 
					
						
							| 
									
										
										
										
											2016-01-02 23:08:51 +08:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   class << self | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |     extend T::Sig | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-09 23:00:51 +02:00
										 |  |  |     include BuildEnvironment::DSL | 
					
						
							| 
									
										
										
										
											2014-07-07 20:16:51 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-22 16:28:07 +01:00
										 |  |  |     attr_reader :env_proc, :build | 
					
						
							| 
									
										
										
										
											2020-05-12 08:32:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-14 13:27:43 +00:00
										 |  |  |     attr_rw :fatal, :cask, :download | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-08 10:18:51 -08:00
										 |  |  |     def satisfy(options = nil, &block) | 
					
						
							| 
									
										
										
										
											2020-11-16 22:18:56 +01:00
										 |  |  |       return @satisfied if options.nil? && !block | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-08 10:18:51 -08:00
										 |  |  |       options = {} if options.nil? | 
					
						
							| 
									
										
										
										
											2020-08-18 03:02:33 +02:00
										 |  |  |       @satisfied = Satisfier.new(options, &block) | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2014-07-07 21:32:35 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def env(*settings, &block) | 
					
						
							| 
									
										
										
										
											2020-11-16 22:18:56 +01:00
										 |  |  |       if block | 
					
						
							| 
									
										
										
										
											2014-07-07 21:32:35 -05:00
										 |  |  |         @env_proc = block | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         super | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-18 03:02:33 +02:00
										 |  |  |   # Helper class for evaluating whether a requirement is satisfied. | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |   class Satisfier | 
					
						
							| 
									
										
										
										
											2014-08-14 19:58:17 -05:00
										 |  |  |     def initialize(options, &block) | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |       case options | 
					
						
							|  |  |  |       when Hash | 
					
						
							| 
									
										
										
										
											2016-09-17 15:32:44 +01:00
										 |  |  |         @options = { build_env: true } | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |         @options.merge!(options) | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         @satisfied = options | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       @proc = block | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-28 14:08:40 +02:00
										 |  |  |     def yielder(env: nil, cc: nil, build_bottle: false, bottle_arch: nil) | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |       if instance_variable_defined?(:@satisfied) | 
					
						
							|  |  |  |         @satisfied | 
					
						
							|  |  |  |       elsif @options[:build_env] | 
					
						
							| 
									
										
										
										
											2014-07-02 21:24:01 -05:00
										 |  |  |         require "extend/ENV" | 
					
						
							| 
									
										
										
										
											2020-07-28 02:04:50 +02:00
										 |  |  |         ENV.with_build_environment( | 
					
						
							| 
									
										
										
										
											2020-07-28 14:08:40 +02:00
										 |  |  |           env: env, cc: cc, build_bottle: build_bottle, bottle_arch: bottle_arch, | 
					
						
							| 
									
										
										
										
											2020-07-28 02:04:50 +02:00
										 |  |  |         ) do | 
					
						
							|  |  |  |           yield @proc | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  |       else | 
					
						
							|  |  |  |         yield @proc | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2020-08-18 03:02:33 +02:00
										 |  |  |   private_constant :Satisfier | 
					
						
							| 
									
										
										
										
											2013-01-30 17:55:04 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-03 15:08:46 -05:00
										 |  |  |   class << self | 
					
						
							|  |  |  |     # Expand the requirements of dependent recursively, optionally yielding | 
					
						
							| 
									
										
										
										
											2018-10-18 21:42:43 -04:00
										 |  |  |     # `[dependent, req]` pairs to allow callers to apply arbitrary filters to | 
					
						
							| 
									
										
										
										
											2013-06-03 15:08:46 -05:00
										 |  |  |     # the list. | 
					
						
							|  |  |  |     # The default filter, which is applied when a block is not given, omits | 
					
						
							|  |  |  |     # optionals and recommendeds based on what the dependent has asked for. | 
					
						
							| 
									
										
										
										
											2021-03-19 03:21:27 +00:00
										 |  |  |     def expand(dependent, cache_key: nil, &block) | 
					
						
							|  |  |  |       if cache_key.present? | 
					
						
							|  |  |  |         cache[cache_key] ||= {} | 
					
						
							|  |  |  |         return cache[cache_key][dependent.full_name].dup if cache[cache_key][dependent.full_name] | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-03 14:50:57 -05:00
										 |  |  |       reqs = Requirements.new | 
					
						
							| 
									
										
										
										
											2013-06-03 15:08:46 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |       formulae = dependent.recursive_dependencies.map(&:to_formula) | 
					
						
							|  |  |  |       formulae.unshift(dependent) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-25 10:12:14 -05:00
										 |  |  |       formulae.each do |f| | 
					
						
							|  |  |  |         f.requirements.each do |req| | 
					
						
							| 
									
										
										
										
											2016-09-23 22:02:23 +02:00
										 |  |  |           next if prune?(f, req, &block) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-23 22:02:23 +02:00
										 |  |  |           reqs << req | 
					
						
							| 
									
										
										
										
											2013-01-30 17:55:04 -06:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2013-06-03 15:08:46 -05:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2013-01-30 17:55:04 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-19 03:21:27 +00:00
										 |  |  |       cache[cache_key][dependent.full_name] = reqs.dup if cache_key.present? | 
					
						
							| 
									
										
										
										
											2013-06-03 15:08:46 -05:00
										 |  |  |       reqs | 
					
						
							| 
									
										
										
										
											2013-01-30 17:55:04 -06:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-16 22:18:56 +01:00
										 |  |  |     def prune?(dependent, req, &block) | 
					
						
							| 
									
										
										
										
											2013-06-03 15:08:46 -05:00
										 |  |  |       catch(:prune) do | 
					
						
							| 
									
										
										
										
											2020-11-16 22:18:56 +01:00
										 |  |  |         if block | 
					
						
							| 
									
										
										
										
											2013-06-03 15:08:46 -05:00
										 |  |  |           yield dependent, req | 
					
						
							|  |  |  |         elsif req.optional? || req.recommended? | 
					
						
							| 
									
										
										
										
											2013-12-09 14:36:10 -06:00
										 |  |  |           prune unless dependent.build.with?(req) | 
					
						
							| 
									
										
										
										
											2013-06-03 15:08:46 -05:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2013-01-30 17:55:04 -06:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-03 15:08:46 -05:00
										 |  |  |     # Used to prune requirements when calling expand with a block. | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |     sig { void } | 
					
						
							| 
									
										
										
										
											2013-06-03 15:08:46 -05:00
										 |  |  |     def prune | 
					
						
							|  |  |  |       throw(:prune, true) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-01-30 17:55:04 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  | end |