livecheck: Add ExtractPlist skip to SkipConditions
When the `--extract-plist` option was added to livecheck, conditions were added in `#run_checks` to skip casks using `ExtractPlist` if the `--extract-plist` isn't used and the run involves multiple formulae/casks. This integrates the skip into the `SkipConditions` class.
This commit is contained in:
		
							parent
							
								
									9ae51618b9
								
							
						
					
					
						commit
						a8d506fdda
					
				@ -241,29 +241,23 @@ module Homebrew
 | 
			
		||||
          puts
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        if cask && !extract_plist && formula_or_cask.livecheck.strategy == :extract_plist
 | 
			
		||||
          skip_info = {
 | 
			
		||||
            cask:     cask.token,
 | 
			
		||||
            status:   "skipped",
 | 
			
		||||
            messages: ["Livecheck skipped due to the ExtractPlist strategy"],
 | 
			
		||||
            meta:     { livecheckable: true },
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          SkipConditions.print_skip_information(skip_info) if !newer_only && !quiet
 | 
			
		||||
          next
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        # Check skip conditions for a referenced formula/cask
 | 
			
		||||
        if referenced_formula_or_cask
 | 
			
		||||
          skip_info = SkipConditions.referenced_skip_information(
 | 
			
		||||
            referenced_formula_or_cask,
 | 
			
		||||
            name,
 | 
			
		||||
            full_name: use_full_name,
 | 
			
		||||
            full_name:     use_full_name,
 | 
			
		||||
            verbose:,
 | 
			
		||||
            extract_plist:,
 | 
			
		||||
          )
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        skip_info ||= SkipConditions.skip_information(formula_or_cask, full_name: use_full_name, verbose:)
 | 
			
		||||
        skip_info ||= SkipConditions.skip_information(
 | 
			
		||||
          formula_or_cask,
 | 
			
		||||
          full_name:     use_full_name,
 | 
			
		||||
          verbose:,
 | 
			
		||||
          extract_plist:,
 | 
			
		||||
        )
 | 
			
		||||
        if skip_info.present?
 | 
			
		||||
          next skip_info if json && !newer_only
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -151,6 +151,27 @@ module Homebrew
 | 
			
		||||
        Livecheck.status_hash(cask, "disabled", full_name:, verbose:)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      sig {
 | 
			
		||||
        params(
 | 
			
		||||
          cask:           Cask::Cask,
 | 
			
		||||
          _livecheckable: T::Boolean,
 | 
			
		||||
          full_name:      T::Boolean,
 | 
			
		||||
          verbose:        T::Boolean,
 | 
			
		||||
          extract_plist:  T::Boolean,
 | 
			
		||||
        ).returns(Hash)
 | 
			
		||||
      }
 | 
			
		||||
      def cask_extract_plist(cask, _livecheckable, full_name: false, verbose: false, extract_plist: false)
 | 
			
		||||
        return {} if extract_plist || cask.livecheck.strategy != :extract_plist
 | 
			
		||||
 | 
			
		||||
        Livecheck.status_hash(
 | 
			
		||||
          cask,
 | 
			
		||||
          "skipped",
 | 
			
		||||
          ["Use `--extract-plist` to enable checking multiple casks with ExtractPlist strategy"],
 | 
			
		||||
          full_name:,
 | 
			
		||||
          verbose:,
 | 
			
		||||
        )
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      sig {
 | 
			
		||||
        params(
 | 
			
		||||
          cask:          Cask::Cask,
 | 
			
		||||
@ -194,6 +215,7 @@ module Homebrew
 | 
			
		||||
        :cask_discontinued,
 | 
			
		||||
        :cask_deprecated,
 | 
			
		||||
        :cask_disabled,
 | 
			
		||||
        :cask_extract_plist,
 | 
			
		||||
        :cask_version_latest,
 | 
			
		||||
        :cask_url_unversioned,
 | 
			
		||||
      ].freeze
 | 
			
		||||
@ -211,9 +233,10 @@ module Homebrew
 | 
			
		||||
          package_or_resource: T.any(Formula, Cask::Cask, Resource),
 | 
			
		||||
          full_name:           T::Boolean,
 | 
			
		||||
          verbose:             T::Boolean,
 | 
			
		||||
          extract_plist:       T::Boolean,
 | 
			
		||||
        ).returns(Hash)
 | 
			
		||||
      }
 | 
			
		||||
      def skip_information(package_or_resource, full_name: false, verbose: false)
 | 
			
		||||
      def skip_information(package_or_resource, full_name: false, verbose: false, extract_plist: true)
 | 
			
		||||
        livecheckable = package_or_resource.livecheckable?
 | 
			
		||||
 | 
			
		||||
        checks = case package_or_resource
 | 
			
		||||
@ -227,7 +250,12 @@ module Homebrew
 | 
			
		||||
        return {} unless checks
 | 
			
		||||
 | 
			
		||||
        checks.each do |method_name|
 | 
			
		||||
          skip_hash = send(method_name, package_or_resource, livecheckable, full_name:, verbose:)
 | 
			
		||||
          skip_hash = case method_name
 | 
			
		||||
          when :cask_extract_plist
 | 
			
		||||
            send(method_name, package_or_resource, livecheckable, full_name:, verbose:, extract_plist:)
 | 
			
		||||
          else
 | 
			
		||||
            send(method_name, package_or_resource, livecheckable, full_name:, verbose:)
 | 
			
		||||
          end
 | 
			
		||||
          return skip_hash if skip_hash.present?
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
@ -244,18 +272,21 @@ module Homebrew
 | 
			
		||||
          original_package_or_resource_name: String,
 | 
			
		||||
          full_name:                         T::Boolean,
 | 
			
		||||
          verbose:                           T::Boolean,
 | 
			
		||||
          extract_plist:                     T::Boolean,
 | 
			
		||||
        ).returns(T.nilable(Hash))
 | 
			
		||||
      }
 | 
			
		||||
      def referenced_skip_information(
 | 
			
		||||
        livecheck_package_or_resource,
 | 
			
		||||
        original_package_or_resource_name,
 | 
			
		||||
        full_name: false,
 | 
			
		||||
        verbose: false
 | 
			
		||||
        verbose: false,
 | 
			
		||||
        extract_plist: true
 | 
			
		||||
      )
 | 
			
		||||
        skip_info = SkipConditions.skip_information(
 | 
			
		||||
          livecheck_package_or_resource,
 | 
			
		||||
          full_name:,
 | 
			
		||||
          verbose:,
 | 
			
		||||
          extract_plist:,
 | 
			
		||||
        )
 | 
			
		||||
        return if skip_info.blank?
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -127,6 +127,18 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do
 | 
			
		||||
 | 
			
		||||
        disable! date: "2020-06-25", because: :discontinued
 | 
			
		||||
      end,
 | 
			
		||||
      extract_plist:     Cask::Cask.new("test_extract_plist_skip") do
 | 
			
		||||
        version "0.0.1"
 | 
			
		||||
 | 
			
		||||
        url "https://brew.sh/test-0.0.1.tgz"
 | 
			
		||||
        name "Test ExtractPlist Skip"
 | 
			
		||||
        desc "Skipped test cask"
 | 
			
		||||
        homepage "https://brew.sh"
 | 
			
		||||
 | 
			
		||||
        livecheck do
 | 
			
		||||
          strategy :extract_plist
 | 
			
		||||
        end
 | 
			
		||||
      end,
 | 
			
		||||
      latest:            Cask::Cask.new("test_latest") do
 | 
			
		||||
        version :latest
 | 
			
		||||
        sha256 :no_check
 | 
			
		||||
@ -267,6 +279,14 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do
 | 
			
		||||
            livecheckable: false,
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        extract_plist:     {
 | 
			
		||||
          cask:     "test_extract_plist_skip",
 | 
			
		||||
          status:   "skipped",
 | 
			
		||||
          messages: ["Use `--extract-plist` to enable checking multiple casks with ExtractPlist strategy"],
 | 
			
		||||
          meta:     {
 | 
			
		||||
            livecheckable: true,
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        latest:            {
 | 
			
		||||
          cask:   "test_latest",
 | 
			
		||||
          status: "latest",
 | 
			
		||||
@ -381,6 +401,13 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "when a cask has a `livecheck` block using `ExtractPlist` and `--extract-plist` is not used" do
 | 
			
		||||
      it "skips" do
 | 
			
		||||
        expect(skip_conditions.skip_information(casks[:extract_plist], extract_plist: false))
 | 
			
		||||
          .to eq(status_hashes[:cask][:extract_plist])
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "when a cask without a livecheckable has `version :latest`" do
 | 
			
		||||
      it "skips" do
 | 
			
		||||
        expect(skip_conditions.skip_information(casks[:latest]))
 | 
			
		||||
@ -497,6 +524,15 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "when a cask has a `livecheck` block using `ExtractPlist` and `--extract-plist` is not used" do
 | 
			
		||||
      it "skips" do
 | 
			
		||||
        expect do
 | 
			
		||||
          skip_conditions.referenced_skip_information(casks[:extract_plist], original_name, extract_plist: false)
 | 
			
		||||
        end
 | 
			
		||||
          .to raise_error(RuntimeError, "Referenced cask (test_extract_plist_skip) is automatically skipped")
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "when a cask without a livecheckable has `version :latest`" do
 | 
			
		||||
      it "errors" do
 | 
			
		||||
        expect { skip_conditions.referenced_skip_information(casks[:latest], original_name) }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user