Create Download Strategy sooner in formula install code.
* Instantiate DownloadStrategy instance when creating a formula. * Rename CurlDownloadStrategy member to clarify what it is for. * Generate downloaded tarball name in initialize.
This commit is contained in:
		
							parent
							
								
									43dc7c9645
								
							
						
					
					
						commit
						6d06b9a179
					
				| @ -53,42 +53,46 @@ class AbstractDownloadStrategy | ||||
| end | ||||
| 
 | ||||
| class CurlDownloadStrategy <AbstractDownloadStrategy | ||||
|   def initialize url, name, version, specs | ||||
|     super | ||||
|     if @unique_token | ||||
|       @tarball_path=HOMEBREW_CACHE+(@unique_token+ext) | ||||
|     else | ||||
|       @tarball_path=HOMEBREW_CACHE+File.basename(@url) | ||||
|     end | ||||
|   end | ||||
|    | ||||
|   def fetch | ||||
|     ohai "Downloading #{@url}" | ||||
|     if @unique_token | ||||
|       @dl=HOMEBREW_CACHE+(@unique_token+ext) | ||||
|     else | ||||
|       @dl=HOMEBREW_CACHE+File.basename(@url) | ||||
|     end | ||||
|     unless @dl.exist? | ||||
|     unless @tarball_path.exist? | ||||
|       begin | ||||
|         curl @url, '-o', @dl | ||||
|         curl @url, '-o', @tarball_path | ||||
|       rescue Exception | ||||
|         ignore_interrupts { @dl.unlink if @dl.exist? } | ||||
|         ignore_interrupts { @tarball_path.unlink if @tarball_path.exist? } | ||||
|         raise | ||||
|       end | ||||
|     else | ||||
|       puts "File already downloaded and cached to #{HOMEBREW_CACHE}" | ||||
|     end | ||||
|     return @dl # thus performs checksum verification | ||||
|     return @tarball_path # thus performs checksum verification | ||||
|   end | ||||
| 
 | ||||
|   def stage | ||||
|     # magic numbers stolen from /usr/share/file/magic/ | ||||
|     if @dl.extname == '.jar' | ||||
|     if @tarball_path.extname == '.jar' | ||||
|       magic_bytes = nil | ||||
|     else | ||||
|       # get the first four bytes | ||||
|       File.open(@dl) { |f| magic_bytes = f.read(4) } | ||||
|       File.open(@tarball_path) { |f| magic_bytes = f.read(4) } | ||||
|     end | ||||
| 
 | ||||
|     # magic numbers stolen from /usr/share/file/magic/ | ||||
|     case magic_bytes | ||||
|     when /^PK\003\004/ # .zip archive | ||||
|       quiet_safe_system '/usr/bin/unzip', {:quiet_flag => '-qq'}, @dl | ||||
|       quiet_safe_system '/usr/bin/unzip', {:quiet_flag => '-qq'}, @tarball_path | ||||
|       chdir | ||||
|     when /^\037\213/, /^BZh/, /^\037\235/  # gzip/bz2/compress compressed | ||||
|       # TODO check if it's really a tar archive | ||||
|       safe_system '/usr/bin/tar', 'xf', @dl | ||||
|       safe_system '/usr/bin/tar', 'xf', @tarball_path | ||||
|       chdir | ||||
|     else | ||||
|       # we are assuming it is not an archive, use original filename | ||||
| @ -98,7 +102,7 @@ class CurlDownloadStrategy <AbstractDownloadStrategy | ||||
|       # behaviour, just open an issue at github | ||||
|       # We also do this for jar files, as they are in fact zip files, but | ||||
|       # we don't want to unzip them | ||||
|       FileUtils.mv @dl, File.basename(@url) | ||||
|       FileUtils.mv @tarball_path, File.basename(@url) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
| @ -130,7 +134,7 @@ end | ||||
| # Useful for installing jars. | ||||
| class NoUnzipCurlDownloadStrategy <CurlDownloadStrategy | ||||
|   def stage | ||||
|     FileUtils.mv @dl, File.basename(@url) | ||||
|     FileUtils.mv @tarball_path, File.basename(@url) | ||||
|   end | ||||
| end | ||||
| 
 | ||||
|  | ||||
| @ -112,6 +112,8 @@ class Formula | ||||
|     CHECKSUM_TYPES.each do |type| | ||||
|       set_instance_variable type | ||||
|     end | ||||
| 
 | ||||
|     @downloader=download_strategy.new url, name, version, specs | ||||
|   end | ||||
| 
 | ||||
|   # if the dir is there, but it's empty we consider it not installed | ||||
| @ -365,12 +367,15 @@ private | ||||
|   end | ||||
| 
 | ||||
|   def stage | ||||
|     ds=download_strategy.new url, name, version, specs | ||||
|     HOMEBREW_CACHE.mkpath | ||||
|     dl=ds.fetch | ||||
|     verify_download_integrity dl if dl.kind_of? Pathname | ||||
| 
 | ||||
|     downloaded_tarball = @downloader.fetch | ||||
|     if downloaded_tarball.kind_of? Pathname | ||||
|       verify_download_integrity downloaded_tarball | ||||
|     end | ||||
|    | ||||
|     mktemp do | ||||
|       ds.stage | ||||
|       @downloader.stage | ||||
|       yield | ||||
|     end | ||||
|   end | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Adam Vandenberg
						Adam Vandenberg