diff --git a/Library/Homebrew/extend/ARGV.rb b/Library/Homebrew/extend/ARGV.rb index 1802991dfc..8c3b238a07 100644 --- a/Library/Homebrew/extend/ARGV.rb +++ b/Library/Homebrew/extend/ARGV.rb @@ -123,6 +123,10 @@ module HomebrewArgvExtension !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 09bb7027b7..7db7f48b24 100644 --- a/Library/Homebrew/extend/os/mac/utils/bottles.rb +++ b/Library/Homebrew/extend/os/mac/utils/bottles.rb @@ -16,8 +16,13 @@ module Utils 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 2efdb01631..8a438193dd 100644 --- a/Library/Homebrew/test/utils/bottles/collector_spec.rb +++ b/Library/Homebrew/test/utils/bottles/collector_spec.rb @@ -20,9 +20,25 @@ describe Utils::Bottles::Collector do 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