From 5ab34abd176b720a1ea5467316fb712aa138fee1 Mon Sep 17 00:00:00 2001 From: Misty De Meo Date: Wed, 5 Jun 2019 19:48:38 -0700 Subject: [PATCH] Bottles: allow skipping or_later tags This is a developer-only feature, so it's gated via `HOMEBREW_DEVELOPER`. This is intended to enable testing of macOS 10.15; users building software manually to test compatibility of early betas need to be able to build software from source instead of via pouring 10.14 bottles. This isn't intended to be a general-purpose `HOMEBREW_BUILD_FROM_SOURCE` replacement, and has no effect on released versions of macOS. --- Library/Homebrew/extend/ARGV.rb | 4 ++++ .../Homebrew/extend/os/mac/utils/bottles.rb | 9 ++++++-- .../test/utils/bottles/collector_spec.rb | 22 ++++++++++++++++--- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Library/Homebrew/extend/ARGV.rb b/Library/Homebrew/extend/ARGV.rb index 1802991dfc51b..8c3b238a07d00 100644 --- a/Library/Homebrew/extend/ARGV.rb +++ b/Library/Homebrew/extend/ARGV.rb @@ -123,6 +123,10 @@ def homebrew_developer? !ENV["HOMEBREW_DEVELOPER"].nil? end + def skip_or_later_bottles? + homebrew_developer? && !ENV["HOMEBREW_SKIP_OR_LATER_BOTTLES"].nil? + end + def no_sandbox? include?("--no-sandbox") || !ENV["HOMEBREW_NO_SANDBOX"].nil? end diff --git a/Library/Homebrew/extend/os/mac/utils/bottles.rb b/Library/Homebrew/extend/os/mac/utils/bottles.rb index 09bb7027b7d7e..7db7f48b241bf 100644 --- a/Library/Homebrew/extend/os/mac/utils/bottles.rb +++ b/Library/Homebrew/extend/os/mac/utils/bottles.rb @@ -16,8 +16,13 @@ class Collector alias generic_find_matching_tag find_matching_tag def find_matching_tag(tag) - generic_find_matching_tag(tag) || - find_older_compatible_tag(tag) + # Used primarily by developers testing beta macOS releases. + if OS::Mac.prerelease? && ARGV.skip_or_later_bottles? + generic_find_matching_tag(tag) + else + generic_find_matching_tag(tag) || + find_older_compatible_tag(tag) + end end def tag_without_or_later(tag) diff --git a/Library/Homebrew/test/utils/bottles/collector_spec.rb b/Library/Homebrew/test/utils/bottles/collector_spec.rb index 2efdb016314e1..8a438193dd7ae 100644 --- a/Library/Homebrew/test/utils/bottles/collector_spec.rb +++ b/Library/Homebrew/test/utils/bottles/collector_spec.rb @@ -20,9 +20,25 @@ end it "uses older tags when needed", :needs_macos do - subject[:yosemite] = "foo" - expect(subject.fetch_checksum_for(:yosemite)).to eq(["foo", :yosemite]) - expect(subject.fetch_checksum_for(:mavericks)).to be nil + subject[:mavericks] = "foo" + expect(subject.send(:find_matching_tag, :mavericks)).to eq(:mavericks) + expect(subject.send(:find_matching_tag, :yosemite)).to eq(:mavericks) + end + + it "does not use older tags when requested not to", :needs_macos do + allow(ARGV).to receive(:skip_or_later_bottles?).and_return(true) + allow(OS::Mac).to receive(:prerelease?).and_return(true) + subject[:mavericks] = "foo" + expect(subject.send(:find_matching_tag, :mavericks)).to eq(:mavericks) + expect(subject.send(:find_matching_tag, :yosemite)).to be_nil + end + + it "ignores HOMEBREW_SKIP_OR_LATER_BOTTLES on release versions", :needs_macos do + allow(ARGV).to receive(:skip_or_later_bottles?).and_return(true) + allow(OS::Mac).to receive(:prerelease?).and_return(false) + subject[:mavericks] = "foo" + expect(subject.send(:find_matching_tag, :mavericks)).to eq(:mavericks) + expect(subject.send(:find_matching_tag, :yosemite)).to eq(:mavericks) end end end