Cleanup tap_git_head and uninstall_flight_blocks?
				
					
				
			Co-authored-by: Kevin <apainintheneck@gmail.com>
This commit is contained in:
		
							parent
							
								
									dd510a5606
								
							
						
					
					
						commit
						119e02ceb0
					
				@ -34,12 +34,6 @@ module Cask
 | 
				
			|||||||
        directives.keys.map(&:to_s).join(", ")
 | 
					        directives.keys.map(&:to_s).join(", ")
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      def uninstall?
 | 
					 | 
				
			||||||
        directives.keys.any? do |key|
 | 
					 | 
				
			||||||
          key.to_s.start_with?("uninstall_")
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      private
 | 
					      private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      def class_for_dsl_key(dsl_key)
 | 
					      def class_for_dsl_key(dsl_key)
 | 
				
			||||||
 | 
				
			|||||||
@ -161,7 +161,12 @@ module Cask
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def uninstall_flight_blocks?
 | 
					    def uninstall_flight_blocks?
 | 
				
			||||||
      artifacts.any? do |artifact|
 | 
					      artifacts.any? do |artifact|
 | 
				
			||||||
        artifact.is_a?(Artifact::AbstractFlightBlock) && artifact.uninstall?
 | 
					        case artifact
 | 
				
			||||||
 | 
					        when Artifact::PreflightBlock
 | 
				
			||||||
 | 
					          artifact.directives.key?(:uninstall_preflight)
 | 
				
			||||||
 | 
					        when Artifact::PostflightBlock
 | 
				
			||||||
 | 
					          artifact.directives.key?(:uninstall_postflight)
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -480,11 +485,13 @@ module Cask
 | 
				
			|||||||
      artifacts.filter_map do |artifact|
 | 
					      artifacts.filter_map do |artifact|
 | 
				
			||||||
        case artifact
 | 
					        case artifact
 | 
				
			||||||
        when Artifact::AbstractFlightBlock
 | 
					        when Artifact::AbstractFlightBlock
 | 
				
			||||||
          next if uninstall_only && !artifact.uninstall?
 | 
					          uninstall_flight_block = artifact.directives.key?(:uninstall_preflight) ||
 | 
				
			||||||
 | 
					                                   artifact.directives.key?(:uninstall_postflight)
 | 
				
			||||||
 | 
					          next if uninstall_only && !uninstall_flight_block
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          # Only indicate whether this block is used as we don't load it from the API
 | 
					          # Only indicate whether this block is used as we don't load it from the API
 | 
				
			||||||
          # We can skip this entirely once we move to internal JSON v3.
 | 
					          # We can skip this entirely once we move to internal JSON v3.
 | 
				
			||||||
          { artifact.summarize => nil } unless compact
 | 
					          { artifact.summarize.to_sym => nil } unless compact
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
          zap_artifact = artifact.is_a?(Artifact::Zap)
 | 
					          zap_artifact = artifact.is_a?(Artifact::Zap)
 | 
				
			||||||
          uninstall_artifact = artifact.respond_to?(:uninstall_phase) || artifact.respond_to?(:post_uninstall_phase)
 | 
					          uninstall_artifact = artifact.respond_to?(:uninstall_phase) || artifact.respond_to?(:post_uninstall_phase)
 | 
				
			||||||
 | 
				
			|||||||
@ -426,7 +426,7 @@ on_request: true)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def remove_tabfile
 | 
					    def remove_tabfile
 | 
				
			||||||
      tabfile = @cask.tab.tabfile
 | 
					      tabfile = @cask.tab.tabfile
 | 
				
			||||||
      FileUtils.rm_f tabfile if tabfile.present? && tabfile.exist?
 | 
					      FileUtils.rm_f tabfile if tabfile
 | 
				
			||||||
      @cask.config_path.parent.rmdir_if_possible
 | 
					      @cask.config_path.parent.rmdir_if_possible
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -32,7 +32,7 @@ module Cask
 | 
				
			|||||||
      tab.source = {
 | 
					      tab.source = {
 | 
				
			||||||
        "path"         => cask.sourcefile_path.to_s,
 | 
					        "path"         => cask.sourcefile_path.to_s,
 | 
				
			||||||
        "tap"          => cask.tap&.name,
 | 
					        "tap"          => cask.tap&.name,
 | 
				
			||||||
        "tap_git_head" => tap_git_head(cask),
 | 
					        "tap_git_head" => cask.tap_git_head,
 | 
				
			||||||
        "version"      => cask.version.to_s,
 | 
					        "version"      => cask.version.to_s,
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      tab.uninstall_artifacts = cask.artifacts_list(uninstall_only: true)
 | 
					      tab.uninstall_artifacts = cask.artifacts_list(uninstall_only: true)
 | 
				
			||||||
 | 
				
			|||||||
@ -41,7 +41,7 @@ class AbstractTab
 | 
				
			|||||||
      "arch"                    => Hardware::CPU.arch,
 | 
					      "arch"                    => Hardware::CPU.arch,
 | 
				
			||||||
      "source"                  => {
 | 
					      "source"                  => {
 | 
				
			||||||
        "tap"          => formula_or_cask.tap&.name,
 | 
					        "tap"          => formula_or_cask.tap&.name,
 | 
				
			||||||
        "tap_git_head" => tap_git_head(formula_or_cask),
 | 
					        "tap_git_head" => formula_or_cask.tap_git_head,
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "built_on"                => DevelopmentTools.build_system_info,
 | 
					      "built_on"                => DevelopmentTools.build_system_info,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -93,12 +93,6 @@ class AbstractTab
 | 
				
			|||||||
    new(attributes)
 | 
					    new(attributes)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def self.tap_git_head(formula_or_cask)
 | 
					 | 
				
			||||||
    return unless formula_or_cask.tap&.installed?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    formula_or_cask.tap.git_head
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def initialize(attributes = {})
 | 
					  def initialize(attributes = {})
 | 
				
			||||||
    attributes.each { |key, value| instance_variable_set(:"@#{key}", value) }
 | 
					    attributes.each { |key, value| instance_variable_set(:"@#{key}", value) }
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
@ -134,6 +128,7 @@ class Tab < AbstractTab
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  attr_accessor :built_as_bottle, :changed_files, :stdlib, :aliases
 | 
					  attr_accessor :built_as_bottle, :changed_files, :stdlib, :aliases
 | 
				
			||||||
  attr_writer :used_options, :unused_options, :compiler, :source_modified_time
 | 
					  attr_writer :used_options, :unused_options, :compiler, :source_modified_time
 | 
				
			||||||
 | 
					  attr_reader :tapped_from
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Instantiates a {Tab} for a new installation of a formula.
 | 
					  # Instantiates a {Tab} for a new installation of a formula.
 | 
				
			||||||
  def self.create(formula, compiler, stdlib)
 | 
					  def self.create(formula, compiler, stdlib)
 | 
				
			||||||
@ -169,8 +164,7 @@ class Tab < AbstractTab
 | 
				
			|||||||
    tab.source_modified_time ||= 0
 | 
					    tab.source_modified_time ||= 0
 | 
				
			||||||
    tab.source ||= {}
 | 
					    tab.source ||= {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tapped_from = tab.instance_variable_get(:@tapped_from)
 | 
					    tab.tap = tab.tapped_from if !tab.tapped_from.nil? && tab.tapped_from != "path or URL"
 | 
				
			||||||
    tab.tap = tapped_from if !tapped_from.nil? && tapped_from != "path or URL"
 | 
					 | 
				
			||||||
    tab.tap = "homebrew/core" if tab.tap == "mxcl/master" || tab.tap == "Homebrew/homebrew"
 | 
					    tab.tap = "homebrew/core" if tab.tap == "mxcl/master" || tab.tap == "Homebrew/homebrew"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if tab.source["spec"].nil?
 | 
					    if tab.source["spec"].nil?
 | 
				
			||||||
@ -255,7 +249,7 @@ class Tab < AbstractTab
 | 
				
			|||||||
      tab.source = {
 | 
					      tab.source = {
 | 
				
			||||||
        "path"         => formula.specified_path.to_s,
 | 
					        "path"         => formula.specified_path.to_s,
 | 
				
			||||||
        "tap"          => formula.tap&.name,
 | 
					        "tap"          => formula.tap&.name,
 | 
				
			||||||
        "tap_git_head" => tap_git_head(formula),
 | 
					        "tap_git_head" => formula.tap_git_head,
 | 
				
			||||||
        "spec"         => formula.active_spec_sym.to_s,
 | 
					        "spec"         => formula.active_spec_sym.to_s,
 | 
				
			||||||
        "versions"     => {
 | 
					        "versions"     => {
 | 
				
			||||||
          "stable"         => formula.stable&.version&.to_s,
 | 
					          "stable"         => formula.stable&.version&.to_s,
 | 
				
			||||||
 | 
				
			|||||||
@ -217,16 +217,16 @@ RSpec.describe Cask::Cask, :cask do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    it "returns all artifacts when no options are given" do
 | 
					    it "returns all artifacts when no options are given" do
 | 
				
			||||||
      expected_artifacts = [
 | 
					      expected_artifacts = [
 | 
				
			||||||
        { "uninstall_preflight" => nil },
 | 
					        { uninstall_preflight: nil },
 | 
				
			||||||
        { "preflight" => nil },
 | 
					        { preflight: nil },
 | 
				
			||||||
        { uninstall: [{
 | 
					        { uninstall: [{
 | 
				
			||||||
          rmdir: "#{TEST_TMPDIR}/empty_directory_path",
 | 
					          rmdir: "#{TEST_TMPDIR}/empty_directory_path",
 | 
				
			||||||
          trash: ["#{TEST_TMPDIR}/foo", "#{TEST_TMPDIR}/bar"],
 | 
					          trash: ["#{TEST_TMPDIR}/foo", "#{TEST_TMPDIR}/bar"],
 | 
				
			||||||
        }] },
 | 
					        }] },
 | 
				
			||||||
        { pkg: ["ManyArtifacts/ManyArtifacts.pkg"] },
 | 
					        { pkg: ["ManyArtifacts/ManyArtifacts.pkg"] },
 | 
				
			||||||
        { app: ["ManyArtifacts/ManyArtifacts.app"] },
 | 
					        { app: ["ManyArtifacts/ManyArtifacts.app"] },
 | 
				
			||||||
        { "uninstall_postflight" => nil },
 | 
					        { uninstall_postflight: nil },
 | 
				
			||||||
        { "postflight" => nil },
 | 
					        { postflight: nil },
 | 
				
			||||||
        { zap: [{
 | 
					        { zap: [{
 | 
				
			||||||
          rmdir: ["~/Library/Caches/ManyArtifacts", "~/Library/Application Support/ManyArtifacts"],
 | 
					          rmdir: ["~/Library/Caches/ManyArtifacts", "~/Library/Application Support/ManyArtifacts"],
 | 
				
			||||||
          trash: "~/Library/Logs/ManyArtifacts.log",
 | 
					          trash: "~/Library/Logs/ManyArtifacts.log",
 | 
				
			||||||
@ -255,13 +255,13 @@ RSpec.describe Cask::Cask, :cask do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    it "returns only uninstall artifacts when uninstall_only is true" do
 | 
					    it "returns only uninstall artifacts when uninstall_only is true" do
 | 
				
			||||||
      expected_artifacts = [
 | 
					      expected_artifacts = [
 | 
				
			||||||
        { "uninstall_preflight" => nil },
 | 
					        { uninstall_preflight: nil },
 | 
				
			||||||
        { uninstall: [{
 | 
					        { uninstall: [{
 | 
				
			||||||
          rmdir: "#{TEST_TMPDIR}/empty_directory_path",
 | 
					          rmdir: "#{TEST_TMPDIR}/empty_directory_path",
 | 
				
			||||||
          trash: ["#{TEST_TMPDIR}/foo", "#{TEST_TMPDIR}/bar"],
 | 
					          trash: ["#{TEST_TMPDIR}/foo", "#{TEST_TMPDIR}/bar"],
 | 
				
			||||||
        }] },
 | 
					        }] },
 | 
				
			||||||
        { app: ["ManyArtifacts/ManyArtifacts.app"] },
 | 
					        { app: ["ManyArtifacts/ManyArtifacts.app"] },
 | 
				
			||||||
        { "uninstall_postflight" => nil },
 | 
					        { uninstall_postflight: nil },
 | 
				
			||||||
        { zap: [{
 | 
					        { zap: [{
 | 
				
			||||||
          rmdir: ["~/Library/Caches/ManyArtifacts", "~/Library/Application Support/ManyArtifacts"],
 | 
					          rmdir: ["~/Library/Caches/ManyArtifacts", "~/Library/Application Support/ManyArtifacts"],
 | 
				
			||||||
          trash: "~/Library/Logs/ManyArtifacts.log",
 | 
					          trash: "~/Library/Logs/ManyArtifacts.log",
 | 
				
			||||||
@ -288,6 +288,39 @@ RSpec.describe Cask::Cask, :cask do
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe "#uninstall_flight_blocks?" do
 | 
				
			||||||
 | 
					    matcher :have_uninstall_flight_blocks do
 | 
				
			||||||
 | 
					      match do |actual|
 | 
				
			||||||
 | 
					        actual.uninstall_flight_blocks? == true
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it "returns true when there are uninstall_preflight blocks" do
 | 
				
			||||||
 | 
					      cask = Cask::CaskLoader.load("with-uninstall-preflight")
 | 
				
			||||||
 | 
					      expect(cask).to have_uninstall_flight_blocks
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it "returns true when there are uninstall_postflight blocks" do
 | 
				
			||||||
 | 
					      cask = Cask::CaskLoader.load("with-uninstall-postflight")
 | 
				
			||||||
 | 
					      expect(cask).to have_uninstall_flight_blocks
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it "returns false when there are only preflight blocks" do
 | 
				
			||||||
 | 
					      cask = Cask::CaskLoader.load("with-preflight")
 | 
				
			||||||
 | 
					      expect(cask).not_to have_uninstall_flight_blocks
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it "returns false when there are only postflight blocks" do
 | 
				
			||||||
 | 
					      cask = Cask::CaskLoader.load("with-postflight")
 | 
				
			||||||
 | 
					      expect(cask).not_to have_uninstall_flight_blocks
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it "returns false when there are no flight blocks" do
 | 
				
			||||||
 | 
					      cask = Cask::CaskLoader.load("local-caffeine")
 | 
				
			||||||
 | 
					      expect(cask).not_to have_uninstall_flight_blocks
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe "#to_h" do
 | 
					  describe "#to_h" do
 | 
				
			||||||
    let(:expected_json) { (TEST_FIXTURE_DIR/"cask/everything.json").read.strip }
 | 
					    let(:expected_json) { (TEST_FIXTURE_DIR/"cask/everything.json").read.strip }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -397,25 +397,6 @@ RSpec.describe Tab do
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe "::tap_git_head" do
 | 
					 | 
				
			||||||
    it "returns nil if the tap is nil" do
 | 
					 | 
				
			||||||
      formula = instance_double(Formula, tap: nil)
 | 
					 | 
				
			||||||
      expect(described_class.tap_git_head(formula)).to be_nil
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it "returns nil if the tap is not installed" do
 | 
					 | 
				
			||||||
      tap = instance_double(Tap, installed?: false)
 | 
					 | 
				
			||||||
      formula = instance_double(Formula, tap:)
 | 
					 | 
				
			||||||
      expect(described_class.tap_git_head(formula)).to be_nil
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it "returns the tap git head if the tap is installed" do
 | 
					 | 
				
			||||||
      tap = instance_double(Tap, installed?: true, git_head: "0453e16c8e3fac73104da50927a86221ca0740c2")
 | 
					 | 
				
			||||||
      formula = instance_double(Formula, tap:)
 | 
					 | 
				
			||||||
      expect(described_class.tap_git_head(formula)).to eq("0453e16c8e3fac73104da50927a86221ca0740c2")
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  specify "#to_json" do
 | 
					  specify "#to_json" do
 | 
				
			||||||
    json_tab = described_class.new(JSON.parse(tab.to_json))
 | 
					    json_tab = described_class.new(JSON.parse(tab.to_json))
 | 
				
			||||||
    expect(json_tab.homebrew_version).to eq(tab.homebrew_version)
 | 
					    expect(json_tab.homebrew_version).to eq(tab.homebrew_version)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user