| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | require "tab" | 
					
						
							|  |  |  | require "os/mac" | 
					
						
							|  |  |  | require "extend/ARGV" | 
					
						
							| 
									
										
										
										
											2012-03-07 21:30:03 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | def built_as_bottle?(f) | 
					
						
							| 
									
										
										
										
											2012-07-22 16:07:20 +01:00
										 |  |  |   return false unless f.installed? | 
					
						
							| 
									
										
										
										
											2012-08-25 11:31:57 -07:00
										 |  |  |   tab = Tab.for_keg(f.installed_prefix) | 
					
						
							| 
									
										
										
										
											2013-06-27 10:09:18 +01:00
										 |  |  |   tab.built_as_bottle | 
					
						
							| 
									
										
										
										
											2012-03-07 21:30:03 -05:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | def bottle_file_outdated?(f, file) | 
					
						
							| 
									
										
										
										
											2012-04-30 15:10:51 -05:00
										 |  |  |   filename = file.basename.to_s | 
					
						
							| 
									
										
										
										
											2014-07-13 11:17:08 -05:00
										 |  |  |   return unless f.bottle && filename.match(Pathname::BOTTLE_EXTNAME_RX) | 
					
						
							| 
									
										
										
										
											2012-04-30 15:10:51 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-06 14:11:44 -05:00
										 |  |  |   bottle_ext = filename[bottle_native_regex, 1] | 
					
						
							|  |  |  |   bottle_url_ext = f.bottle.url[bottle_native_regex, 1] | 
					
						
							| 
									
										
										
										
											2012-04-30 15:10:51 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   bottle_ext && bottle_url_ext && bottle_ext != bottle_url_ext | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-07 21:30:03 -05:00
										 |  |  | def bottle_native_regex | 
					
						
							| 
									
										
										
										
											2013-06-06 16:02:27 -05:00
										 |  |  |   /(\.#{bottle_tag}\.bottle\.(\d+\.)?tar\.gz)$/o | 
					
						
							| 
									
										
										
										
											2012-03-07 21:30:03 -05:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-06 16:02:27 -05:00
										 |  |  | def bottle_tag | 
					
						
							| 
									
										
										
										
											2013-10-23 00:09:35 +01:00
										 |  |  |   if MacOS.version >= :lion | 
					
						
							| 
									
										
										
										
											2013-06-06 16:02:27 -05:00
										 |  |  |     MacOS.cat | 
					
						
							| 
									
										
										
										
											2013-10-23 00:09:35 +01:00
										 |  |  |   elsif MacOS.version == :snow_leopard | 
					
						
							| 
									
										
										
										
											2013-06-13 12:04:58 -05:00
										 |  |  |     Hardware::CPU.is_64_bit? ? :snow_leopard : :snow_leopard_32 | 
					
						
							| 
									
										
										
										
											2013-06-06 16:02:27 -05:00
										 |  |  |   else | 
					
						
							| 
									
										
										
										
											2013-10-21 13:46:09 -07:00
										 |  |  |     # Return, e.g., :tiger_g3, :leopard_g5_64, :leopard_64 (which is Intel) | 
					
						
							|  |  |  |     if Hardware::CPU.type == :ppc | 
					
						
							|  |  |  |       tag = "#{MacOS.cat}_#{Hardware::CPU.family}".to_sym | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       tag = MacOS.cat | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     MacOS.prefer_64_bit? ? "#{tag}_64".to_sym : tag | 
					
						
							| 
									
										
										
										
											2013-06-06 16:02:27 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2013-07-04 11:21:50 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | def bottle_receipt_path(bottle_file) | 
					
						
							| 
									
										
										
										
											2015-06-06 14:02:30 +08:00
										 |  |  |   Utils.popen_read("tar", "-tzf", bottle_file, "*/*/INSTALL_RECEIPT.json").chomp | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | def bottle_resolve_formula_names(bottle_file) | 
					
						
							| 
									
										
										
										
											2015-06-06 14:02:30 +08:00
										 |  |  |   receipt_file_path = bottle_receipt_path bottle_file | 
					
						
							| 
									
										
										
										
											2015-05-27 22:47:19 +08:00
										 |  |  |   receipt_file = Utils.popen_read("tar", "-xOzf", bottle_file, receipt_file_path) | 
					
						
							|  |  |  |   name = receipt_file_path.split("/").first | 
					
						
							|  |  |  |   tap = Tab.from_file_content(receipt_file, "#{bottle_file}/#{receipt_file_path}").tap | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-02 16:12:14 +08:00
										 |  |  |   if tap.nil? || tap == "Homebrew/homebrew" | 
					
						
							| 
									
										
										
										
											2015-05-27 22:47:19 +08:00
										 |  |  |     full_name = name | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     full_name = "#{tap.sub("homebrew-", "")}/#{name}" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   [name, full_name] | 
					
						
							| 
									
										
										
										
											2013-07-04 11:21:50 +01:00
										 |  |  | end | 
					
						
							| 
									
										
										
										
											2013-10-21 21:03:14 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | def bottle_resolve_version(bottle_file) | 
					
						
							| 
									
										
										
										
											2015-07-22 22:26:52 +08:00
										 |  |  |   PkgVersion.parse bottle_receipt_path(bottle_file).split("/")[1] | 
					
						
							| 
									
										
										
										
											2015-06-04 21:35:05 +08:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-19 10:56:01 +00:00
										 |  |  | class Bintray | 
					
						
							| 
									
										
										
										
											2015-02-19 12:56:31 +00:00
										 |  |  |   def self.package(formula_name) | 
					
						
							| 
									
										
										
										
											2015-08-06 15:45:52 +08:00
										 |  |  |     formula_name.to_s.tr("+", "x") | 
					
						
							| 
									
										
										
										
											2015-02-19 12:56:31 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def self.repository(tap = nil) | 
					
						
							| 
									
										
										
										
											2015-08-02 16:12:14 +08:00
										 |  |  |     return "bottles" if tap.nil? || tap == "Homebrew/homebrew" | 
					
						
							| 
									
										
										
										
											2015-08-06 15:45:52 +08:00
										 |  |  |     "bottles-#{tap.sub(%r{^homebrew/(homebrew-)?}i, "")}" | 
					
						
							| 
									
										
										
										
											2015-02-19 10:56:01 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-21 21:03:14 -07:00
										 |  |  | class BottleCollector | 
					
						
							|  |  |  |   def initialize | 
					
						
							| 
									
										
										
										
											2014-07-16 18:54:19 -05:00
										 |  |  |     @checksums = {} | 
					
						
							| 
									
										
										
										
											2013-10-21 21:03:14 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-16 14:52:18 -05:00
										 |  |  |   def fetch_checksum_for(tag) | 
					
						
							| 
									
										
										
										
											2014-07-16 21:11:48 -05:00
										 |  |  |     tag = find_matching_tag(tag) | 
					
						
							|  |  |  |     return self[tag], tag if tag | 
					
						
							| 
									
										
										
										
											2013-10-21 21:03:14 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-15 21:55:14 -05:00
										 |  |  |   def keys | 
					
						
							| 
									
										
										
										
											2014-07-16 18:54:19 -05:00
										 |  |  |     @checksums.keys | 
					
						
							| 
									
										
										
										
											2014-07-15 21:55:14 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def [](key) | 
					
						
							| 
									
										
										
										
											2014-07-16 18:54:19 -05:00
										 |  |  |     @checksums[key] | 
					
						
							| 
									
										
										
										
											2014-07-15 21:55:14 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def []=(key, value) | 
					
						
							| 
									
										
										
										
											2014-07-16 18:54:19 -05:00
										 |  |  |     @checksums[key] = value | 
					
						
							| 
									
										
										
										
											2014-07-15 21:55:14 -05:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-10-21 21:25:42 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-16 18:54:19 -05:00
										 |  |  |   def key?(key) | 
					
						
							| 
									
										
										
										
											2014-07-16 18:54:19 -05:00
										 |  |  |     @checksums.key?(key) | 
					
						
							| 
									
										
										
										
											2014-07-16 18:54:19 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-16 18:54:19 -05:00
										 |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-16 21:11:48 -05:00
										 |  |  |   def find_matching_tag(tag) | 
					
						
							|  |  |  |     if key?(tag) | 
					
						
							|  |  |  |       tag | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       find_altivec_tag(tag) || find_or_later_tag(tag) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-21 21:03:14 -07:00
										 |  |  |   # This allows generic Altivec PPC bottles to be supported in some | 
					
						
							|  |  |  |   # formulae, while also allowing specific bottles in others; e.g., | 
					
						
							|  |  |  |   # sometimes a formula has just :tiger_altivec, other times it has | 
					
						
							|  |  |  |   # :tiger_g4, :tiger_g5, etc. | 
					
						
							|  |  |  |   def find_altivec_tag(tag) | 
					
						
							|  |  |  |     if tag.to_s =~ /(\w+)_(g4|g4e|g5)$/ | 
					
						
							| 
									
										
										
										
											2014-07-16 18:54:19 -05:00
										 |  |  |       altivec_tag = "#{$1}_altivec".to_sym | 
					
						
							| 
									
										
										
										
											2014-07-16 21:11:48 -05:00
										 |  |  |       altivec_tag if key?(altivec_tag) | 
					
						
							| 
									
										
										
										
											2013-10-21 21:03:14 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Allows a bottle tag to specify a specific OS or later, | 
					
						
							|  |  |  |   # so the same bottle can target multiple OSs. | 
					
						
							|  |  |  |   # Not used in core, used in taps. | 
					
						
							|  |  |  |   def find_or_later_tag(tag) | 
					
						
							| 
									
										
										
										
											2014-07-16 21:11:48 -05:00
										 |  |  |     begin | 
					
						
							|  |  |  |       tag_version = MacOS::Version.from_symbol(tag) | 
					
						
							|  |  |  |     rescue ArgumentError | 
					
						
							|  |  |  |       return | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-16 21:11:48 -05:00
										 |  |  |     keys.find do |key| | 
					
						
							|  |  |  |       if key.to_s.end_with?("_or_later") | 
					
						
							|  |  |  |         later_tag = key.to_s[/(\w+)_or_later$/, 1].to_sym | 
					
						
							| 
									
										
										
										
											2014-07-16 21:11:48 -05:00
										 |  |  |         MacOS::Version.from_symbol(later_tag) <= tag_version | 
					
						
							| 
									
										
										
										
											2014-07-16 21:11:48 -05:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2013-10-21 21:03:14 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |