From bdbc19c614dd9f787c92ce3e0f62180d2238f177 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Fri, 30 Dec 2016 16:16:28 +0000 Subject: [PATCH] tab: implement #reliable_runtime_dependencies? --- Library/Homebrew/tab.rb | 20 +++++++++++++ Library/Homebrew/test/tab_test.rb | 47 +++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/Library/Homebrew/tab.rb b/Library/Homebrew/tab.rb index 40626bad1e..332237a57f 100644 --- a/Library/Homebrew/tab.rb +++ b/Library/Homebrew/tab.rb @@ -242,6 +242,26 @@ class Tab < OpenStruct super || DevelopmentTools.default_compiler end + def homebrew_tag + homebrew_version.sub(/\-\d+\-g([a-f0-9]+)(?:\-dirty)?\Z/, "") + end + + def parsed_homebrew_version + return Version::NULL if homebrew_version.nil? + Version.new(homebrew_tag) + end + + # Whether there is reliable runtime dependency information in the receipt. + def reliable_runtime_dependencies? + return false if runtime_dependencies.nil? + + # Homebrew versions prior to 1.1.6 generated incorrect runtime dependency + # lists. + return false if parsed_homebrew_version < "1.1.6" + + true + end + def cxxstdlib # Older tabs won't have these values, so provide sensible defaults lib = stdlib.to_sym if stdlib diff --git a/Library/Homebrew/test/tab_test.rb b/Library/Homebrew/test/tab_test.rb index 5d83b5907f..eecb111947 100644 --- a/Library/Homebrew/test/tab_test.rb +++ b/Library/Homebrew/test/tab_test.rb @@ -69,6 +69,53 @@ class TabTests < Homebrew::TestCase assert_predicate tab, :universal? end + def test_homebrew_tag + tab = Tab.new(homebrew_version: "1.2.3") + assert_equal "1.2.3", tab.homebrew_tag + + tab.homebrew_version = "1.2.4-567-g12789abdf" + assert_equal "1.2.4", tab.homebrew_tag + + tab.homebrew_version = "2.0.0-134-gabcdefabc-dirty" + assert_equal "2.0.0", tab.homebrew_tag + end + + def test_parsed_homebrew_version + tab = Tab.new + assert_same Version::NULL, tab.parsed_homebrew_version + + tab = Tab.new(homebrew_version: "1.2.3") + assert_equal "1.2.3", tab.parsed_homebrew_version + assert_kind_of Version, tab.parsed_homebrew_version + + tab = Tab.new(homebrew_version: "2.0.0-134-gabcdefabc-dirty") + assert_equal "2.0.0", tab.parsed_homebrew_version + assert_kind_of Version, tab.parsed_homebrew_version + end + + def test_reliable_runtime_dependencies? + tab = Tab.new + refute_predicate tab, :reliable_runtime_dependencies? + + tab.homebrew_version = "1.1.6" + refute_predicate tab, :reliable_runtime_dependencies? + + tab.runtime_dependencies = [] + assert_predicate tab, :reliable_runtime_dependencies? + + tab.homebrew_version = "1.1.5" + refute_predicate tab, :reliable_runtime_dependencies? + + tab.homebrew_version = "1.1.7" + assert_predicate tab, :reliable_runtime_dependencies? + + tab.homebrew_version = "1.1.10" + assert_predicate tab, :reliable_runtime_dependencies? + + tab.runtime_dependencies = [{ "full_name" => "foo", "version" => "1.0" }] + assert_predicate tab, :reliable_runtime_dependencies? + end + def test_cxxstdlib assert_equal :clang, @tab.cxxstdlib.compiler assert_equal :libcxx, @tab.cxxstdlib.type