2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								require  " rubygems "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-28 17:53:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								require  " formula_installer "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								require  " hbc/cask_dependencies "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								require  " hbc/staged "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								require  " hbc/verify "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								module  Hbc  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  class  Installer 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-26 07:30:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    extend  Predicable 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # TODO: it is unwise for Hbc::Staged to be a module, when we are 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    #       dealing with both staged and unstaged Casks here. This should 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    #       either be a class which is only sometimes instantiated, or there 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    #       should be explicit checks on whether staged state is valid in 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    #       every method. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    include  Staged 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    include  Verify 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    PERSISTENT_METADATA_SUBDIRS  =  [ " gpg " ] . freeze 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-21 00:15:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  initialize ( cask ,  command :  SystemCommand ,  force :  false ,  skip_cask_deps :  false ,  binaries :  true ,  verbose :  false ,  require_sha :  false ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @cask  =  cask 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @command  =  command 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @force  =  force 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @skip_cask_deps  =  skip_cask_deps 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-19 19:13:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @binaries  =  binaries 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-21 00:15:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @verbose  =  verbose 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @require_sha  =  require_sha 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 01:31:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @reinstall  =  false 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-26 07:30:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    attr_predicate  :binaries? ,  :force? ,  :skip_cask_deps? ,  :require_sha? ,  :verbose? 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-21 00:15:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  self . print_caveats ( cask ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      odebug  " Printing caveats " 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-24 17:07:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      return  if  cask . caveats . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      output  =  capture_output  do 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        cask . caveats . each  do  | caveat | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          if  caveat . respond_to? ( :eval_and_print ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            caveat . eval_and_print ( cask ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            puts  caveat 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								          end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-24 17:07:57 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  if  output . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ohai  " Caveats " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      puts  output 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  self . capture_output ( & block ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      old_stdout  =  $stdout 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      $stdout  =  Buffer . new ( $stdout . tty? ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      block . call 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      output  =  $stdout . string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      $stdout  =  old_stdout 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      output 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:13:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  fetch 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      odebug  " Hbc::Installer # fetch " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      satisfy_dependencies 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-26 07:30:28 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      verify_has_sha  if  require_sha?  &&  ! force? 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:13:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      download 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      verify 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  stage 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      odebug  " Hbc::Installer # stage " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      extract_primary_container 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      save_caskfile 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    rescue  StandardError  = >  e 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      purge_versioned_files 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      raise  e 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  install 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:13:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      odebug  " Hbc::Installer # install " 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-21 00:15:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  @cask . installed?  &&  ! force?  &&  ! @reinstall 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-01 23:18:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        raise  CaskAlreadyInstalledError ,  @cask 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-08-05 15:56:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      check_conflicts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      print_caveats 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:13:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      fetch 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-17 17:21:02 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      uninstall_existing_cask  if  @reinstall 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-18 18:57:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      oh1  " Installing Cask  #{ @cask } " 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:13:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      stage 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      install_artifacts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      enable_accessibility_access 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      puts  summary 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-08-05 15:56:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  check_conflicts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  unless  @cask . conflicts_with 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @cask . conflicts_with . cask . each  do  | conflicting_cask | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        begin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          conflicting_cask  =  CaskLoader . load ( conflicting_cask ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          if  conflicting_cask . installed? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            raise  CaskConflictError . new ( @cask ,  conflicting_cask ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        rescue  CaskUnavailableError 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          next  # Ignore conflicting Casks that do not exist. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 01:31:29 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  reinstall 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      odebug  " Hbc::Installer # reinstall " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @reinstall  =  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      install 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-17 17:21:02 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  uninstall_existing_cask 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  unless  @cask . installed? 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-18 17:48:20 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # use the same cask file that was used for installation, if possible 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-17 17:21:02 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      installed_caskfile  =  @cask . installed_caskfile 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-07 15:58:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      installed_cask  =  installed_caskfile . exist?  ?  CaskLoader . load ( installed_caskfile )  :  @cask 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-18 17:48:20 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      # Always force uninstallation, ignore method parameter 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-21 00:15:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Installer . new ( installed_cask ,  binaries :  binaries? ,  verbose :  verbose? ,  force :  true ) . uninstall 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-18 17:48:20 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  summary 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 21:52:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      s  =  " " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      s  <<  " #{ Emoji . install_badge }    "  if  Emoji . enabled? 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      s  <<  " #{ @cask }  was successfully installed! " 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  download 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      odebug  " Downloading " 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:13:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @downloaded_path  =  Download . new ( @cask ,  force :  false ) . perform 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      odebug  " Downloaded to ->  #{ @downloaded_path } " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @downloaded_path 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  verify_has_sha 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      odebug  " Checking cask has checksum " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  unless  @cask . sha256  ==  :no_check 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-11 02:00:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      raise  CaskNoShasumError ,  @cask . token 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  verify 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Verify . all ( @cask ,  @downloaded_path ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  extract_primary_container 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      odebug  " Extracting primary container " 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:13:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      FileUtils . mkdir_p  @cask . staged_path 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-24 19:24:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      container  =  if  @cask . container & . type 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-14 20:11:33 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        Container . from_type ( @cask . container . type ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Container . for_path ( @downloaded_path ,  @command ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:13:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      unless  container 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        raise  CaskError ,  " Uh oh, could not figure out how to unpack ' #{ @downloaded_path } ' " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:13:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      odebug  " Using container class  #{ container }  for  #{ @downloaded_path } " 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-11 04:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      container . new ( @cask ,  @downloaded_path ,  @command ,  verbose :  verbose? ) . extract 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  install_artifacts 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:14:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      already_installed_artifacts  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      odebug  " Installing artifacts " 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-04 17:08:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      artifacts  =  @cask . artifacts 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      odebug  " #{ artifacts . length }  artifact/s defined " ,  artifacts 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:14:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      artifacts . each  do  | artifact | 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-05 07:47:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        next  unless  artifact . respond_to? ( :install_phase ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-05 23:27:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        odebug  " Installing artifact of class  #{ artifact . class } " 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-19 19:13:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  artifact . is_a? ( Artifact :: Binary ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          next  unless  binaries? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-06 00:33:31 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        artifact . install_phase ( command :  @command ,  verbose :  verbose? ,  force :  force? ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-23 14:19:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        already_installed_artifacts . unshift ( artifact ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:14:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    rescue  StandardError  = >  e 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      begin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        already_installed_artifacts . each  do  | artifact | 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-05 07:47:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          next  unless  artifact . respond_to? ( :uninstall_phase ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-05 23:27:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          odebug  " Reverting installation of artifact of class  #{ artifact . class } " 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-06 00:33:31 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          artifact . uninstall_phase ( command :  @command ,  verbose :  verbose? ,  force :  force? ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:14:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ensure 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        purge_versioned_files 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-16 18:22:04 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        raise  e 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:14:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # TODO: move dependencies to a separate class 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    #       dependencies should also apply for "brew cask stage" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    #       override dependencies with --force or perhaps --force-deps 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  satisfy_dependencies 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  unless  @cask . depends_on 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ohai  " Satisfying dependencies " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      macos_dependencies 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      arch_dependencies 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      x11_dependencies 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      formula_dependencies 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-21 00:15:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      cask_dependencies  unless  skip_cask_deps? 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  macos_dependencies 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  unless  @cask . depends_on . macos 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  @cask . depends_on . macos . first . is_a? ( Array ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        operator ,  release  =  @cask . depends_on . macos . first 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        unless  MacOS . version . send ( operator ,  release ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          raise  CaskError ,  " Cask  #{ @cask }  depends on macOS release  #{ operator }   #{ release } , but you are running release  #{ MacOS . version } . " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      elsif  @cask . depends_on . macos . length  >  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        unless  @cask . depends_on . macos . include? ( Gem :: Version . new ( MacOS . version . to_s ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          raise  CaskError ,  " Cask  #{ @cask }  depends on macOS release being one of [ #{ @cask . depends_on . macos . map ( & :to_s ) . join ( " ,  " ) } ], but you are running release  #{ MacOS . version } . " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        unless  MacOS . version  ==  @cask . depends_on . macos . first 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          raise  CaskError ,  " Cask  #{ @cask }  depends on macOS release  #{ @cask . depends_on . macos . first } , but you are running release  #{ MacOS . version } . " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  arch_dependencies 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  if  @cask . depends_on . arch . nil? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @current_arch  || =  {  type :  Hardware :: CPU . type ,  bits :  Hardware :: CPU . bits  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-23 14:44:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      return  if  @cask . depends_on . arch . any?  do  | arch | 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        arch [ :type ]  ==  @current_arch [ :type ]  && 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Array ( arch [ :bits ] ) . include? ( @current_arch [ :bits ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-23 14:44:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      raise  CaskError ,  " Cask  #{ @cask }  depends on hardware architecture being one of [ #{ @cask . depends_on . arch . map ( & :to_s ) . join ( " ,  " ) } ], but you are running  #{ @current_arch } " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  x11_dependencies 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  unless  @cask . depends_on . x11 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 21:35:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      raise  CaskX11DependencyError ,  @cask . token  unless  MacOS :: X11 . installed? 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  formula_dependencies 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-28 17:53:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      formulae  =  @cask . depends_on . formula . map  {  | f |  Formula [ f ]  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  if  formulae . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  formulae . all? ( & :any_version_installed? ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        puts  " All Formula dependencies satisfied. " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      not_installed  =  formulae . reject ( & :any_version_installed? ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ohai  " Installing Formula dependencies:  #{ not_installed . map ( & :to_s ) . join ( " ,  " ) } " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      not_installed . each  do  | formula | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        begin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          old_argv  =  ARGV . dup 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          ARGV . replace ( [ ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          FormulaInstaller . new ( formula ) . tap  do  | fi | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            fi . installed_as_dependency  =  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            fi . installed_on_request  =  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            fi . show_header  =  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            fi . verbose  =  verbose? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            fi . prelude 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            fi . install 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            fi . finish 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ensure 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          ARGV . replace ( old_argv ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  cask_dependencies 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-28 17:53:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      return  if  @cask . depends_on . cask . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      casks  =  CaskDependencies . new ( @cask ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  casks . all? ( & :installed? ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        puts  " All Cask dependencies satisfied. " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      not_installed  =  casks . reject ( & :installed? ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ohai  " Installing Cask dependencies:  #{ not_installed . map ( & :to_s ) . join ( " ,  " ) } " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      not_installed . each  do  | cask | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Installer . new ( cask ,  binaries :  binaries? ,  verbose :  verbose? ,  skip_cask_deps :  true ,  force :  false ) . install 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  print_caveats 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      self . class . print_caveats ( @cask ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    # TODO: logically could be in a separate class 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  enable_accessibility_access 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  unless  @cask . accessibility_access 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ohai  " Enabling accessibility access " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  MacOS . version  < =  :mountain_lion 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        @command . run! ( " /usr/bin/touch " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                      args :  [ Hbc . pre_mavericks_accessibility_dotfile ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                      sudo :  true ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      elsif  MacOS . version  < =  :yosemite 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        @command . run! ( " /usr/bin/sqlite3 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                      args :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-14 20:33:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        Hbc . tcc_db , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " INSERT OR REPLACE INTO access VALUES('kTCCServiceAccessibility',' #{ bundle_identifier } ',0,1,1,NULL); " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                      ] , 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                      sudo :  true ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      elsif  MacOS . version  < =  :el_capitan 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        @command . run! ( " /usr/bin/sqlite3 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                      args :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-14 20:33:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        Hbc . tcc_db , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " INSERT OR REPLACE INTO access VALUES('kTCCServiceAccessibility',' #{ bundle_identifier } ',0,1,1,NULL,NULL); " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                      ] , 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                      sudo :  true ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      else 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-15 02:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        opoo  << ~ EOS 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          Accessibility  access  cannot  be  enabled  automatically  on  this  version  of  macOS . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          See  System  Preferences  to  enable  it  manually . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        EOS 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-04 23:13:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    rescue  StandardError  = >  e 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      purge_versioned_files 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      raise  e 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  disable_accessibility_access 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  unless  @cask . accessibility_access 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  MacOS . version  > =  :mavericks  &&  MacOS . version  < =  :el_capitan 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ohai  " Disabling accessibility access " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        @command . run! ( " /usr/bin/sqlite3 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                      args :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-14 20:33:16 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                        Hbc . tcc_db , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        " DELETE FROM access WHERE client=' #{ bundle_identifier } '; " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                      ] , 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                      sudo :  true ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      else 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-15 02:28:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        opoo  << ~ EOS 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          Accessibility  access  cannot  be  disabled  automatically  on  this  version  of  macOS . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          See  System  Preferences  to  disable  it  manually . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        EOS 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  save_caskfile 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-20 10:48:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      old_savedir  =  @cask . metadata_timestamped_path 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-11 18:55:16 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  unless  @cask . sourcefile_path 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-20 10:48:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      savedir  =  @cask . metadata_subdir ( " Casks " ,  timestamp :  :now ,  create :  true ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-11 18:55:16 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      FileUtils . copy  @cask . sourcefile_path ,  savedir 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-24 19:24:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      old_savedir & . rmtree 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  uninstall 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-18 18:57:04 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      oh1  " Uninstalling Cask  #{ @cask } " 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      disable_accessibility_access 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      uninstall_artifacts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      purge_versioned_files 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-21 00:15:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      purge_caskroom_path  if  force? 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  uninstall_artifacts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      odebug  " Un-installing artifacts " 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-04 17:08:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      artifacts  =  @cask . artifacts 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-16 17:10:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      odebug  " #{ artifacts . length }  artifact/s defined " ,  artifacts 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-16 17:10:40 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      artifacts . each  do  | artifact | 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-05 07:47:54 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        next  unless  artifact . respond_to? ( :uninstall_phase ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-05 23:27:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        odebug  " Un-installing artifact of class  #{ artifact . class } " 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-06 00:33:31 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        artifact . uninstall_phase ( command :  @command ,  verbose :  verbose? ,  force :  force? ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  zap 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-14 20:08:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      ohai  %Q( Implied "brew cask uninstall  #{ @cask } " ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      uninstall_artifacts 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-04 17:08:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  ( zap_stanzas  =  @cask . artifacts . select  {  | a |  a . is_a? ( Artifact :: Zap )  } ) . empty? 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        opoo  " No zap stanza present for Cask ' #{ @cask } ' " 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-06 00:33:31 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ohai  " Dispatching zap stanza " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        zap_stanzas . each  do  | stanza | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          stanza . zap_phase ( command :  @command ,  verbose :  verbose? ,  force :  force? ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ohai  " Removing all staged versions of Cask ' #{ @cask } ' " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      purge_caskroom_path 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  gain_permissions_remove ( path ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Utils . gain_permissions_remove ( path ,  command :  @command ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  purge_versioned_files 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      odebug  " Purging files for version  #{ @cask . version }  of Cask  #{ @cask } " 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      # versioned staged distribution 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      gain_permissions_remove ( @cask . staged_path )  if  ! @cask . staged_path . nil?  &&  @cask . staged_path . exist? 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      # Homebrew-Cask metadata 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-20 10:48:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      if  @cask . metadata_versioned_path . respond_to? ( :children )  && 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         @cask . metadata_versioned_path . exist? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        @cask . metadata_versioned_path . children . each  do  | subdir | 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          unless  PERSISTENT_METADATA_SUBDIRS . include? ( subdir . basename ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            gain_permissions_remove ( subdir ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-20 10:48:32 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @cask . metadata_versioned_path . rmdir_if_possible 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      @cask . metadata_master_container_path . rmdir_if_possible 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      # toplevel staged distribution 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      @cask . caskroom_path . rmdir_if_possible 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-24 13:52:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    def  purge_caskroom_path 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      odebug  " Purging all staged versions of Cask  #{ @cask } " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      gain_permissions_remove ( @cask . caskroom_path ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 22:11:42 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								end