diff options
| author | Mike McQuaid | 2016-09-20 08:08:28 +0100 |
|---|---|---|
| committer | GitHub | 2016-09-20 08:08:28 +0100 |
| commit | 9412c89e2d035104b25cf334600fd31204044441 (patch) | |
| tree | 1b1baaf4b462f823091ac54c80d76d691690a47c /Library | |
| parent | e22610aedd550cb5577dd08cedb7a5609d0ff0b8 (diff) | |
| parent | 28f707c907dfbaca2c7c8794d9109a22bc66edf1 (diff) | |
| download | brew-9412c89e2d035104b25cf334600fd31204044441.tar.bz2 | |
Merge pull request #1032 from penman/preserve_dependencies
Save runtime dependencies in INSTALL_RECEIPT.json
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/formula.rb | 6 | ||||
| -rw-r--r-- | Library/Homebrew/tab.rb | 7 | ||||
| -rw-r--r-- | Library/Homebrew/test/fixtures/receipt.json | 6 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_formula.rb | 21 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_tab.rb | 29 | ||||
| -rw-r--r-- | Library/Homebrew/test/testing_env.rb | 2 |
6 files changed, 69 insertions, 2 deletions
diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index cdbc90576..4a48a5749 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -1450,6 +1450,12 @@ class Formula Requirement.expand(self, &block) end + # Returns a list of Dependency objects that are required at runtime. + # @private + def runtime_dependencies + recursive_dependencies.reject(&:build?) + end + # @private def to_hash hsh = { diff --git a/Library/Homebrew/tab.rb b/Library/Homebrew/tab.rb index 53338a035..12b23cc73 100644 --- a/Library/Homebrew/tab.rb +++ b/Library/Homebrew/tab.rb @@ -30,6 +30,10 @@ class Tab < OpenStruct "HEAD" => HOMEBREW_REPOSITORY.git_head, "compiler" => compiler, "stdlib" => stdlib, + "runtime_dependencies" => formula.runtime_dependencies.map do |dep| + f = dep.to_formula + { "full_name" => f.full_name, "version" => f.version.to_s } + end, "source" => { "path" => formula.specified_path.to_s, "tap" => formula.tap ? formula.tap.name : nil, @@ -56,6 +60,7 @@ class Tab < OpenStruct def self.from_file_content(content, path) attributes = Utils::JSON.load(content) attributes["tabfile"] = path + attributes["runtime_dependencies"] ||= [] attributes["source_modified_time"] ||= 0 attributes["source"] ||= {} @@ -172,6 +177,7 @@ class Tab < OpenStruct "HEAD" => nil, "stdlib" => nil, "compiler" => DevelopmentTools.default_compiler, + "runtime_dependencies" => [], "source" => { "path" => nil, "tap" => nil, @@ -303,6 +309,7 @@ class Tab < OpenStruct "HEAD" => self.HEAD, "stdlib" => (stdlib.to_s if stdlib), "compiler" => (compiler.to_s if compiler), + "runtime_dependencies" => runtime_dependencies, "source" => source, } diff --git a/Library/Homebrew/test/fixtures/receipt.json b/Library/Homebrew/test/fixtures/receipt.json index 585a4e27d..62672bfa9 100644 --- a/Library/Homebrew/test/fixtures/receipt.json +++ b/Library/Homebrew/test/fixtures/receipt.json @@ -14,6 +14,12 @@ "alias_path": "/usr/local/Library/Taps/homebrew/homebrew-core/Aliases/test-formula", "stdlib": "libcxx", "compiler": "clang", + "runtime_dependencies": [ + { + "full_name": "foo", + "version": "1.0" + } + ], "source": { "path": "/usr/local/Library/Taps/hombrew/homebrew-core/Formula/foo.rb", "tap": "homebrew/core", diff --git a/Library/Homebrew/test/test_formula.rb b/Library/Homebrew/test/test_formula.rb index dcb3e3349..9207f8ead 100644 --- a/Library/Homebrew/test/test_formula.rb +++ b/Library/Homebrew/test/test_formula.rb @@ -638,6 +638,27 @@ class FormulaTests < Homebrew::TestCase f1.test_fixtures("foo") end + def test_dependencies + stub_formula_loader formula("f1") { url "f1-1.0" } + stub_formula_loader formula("f2") { url "f2-1.0" } + + f3 = formula("f3") do + url "f3-1.0" + depends_on "f1" => :build + depends_on "f2" + end + stub_formula_loader f3 + + f4 = formula("f4") do + url "f4-1.0" + depends_on "f3" + end + + assert_equal %w[f3], f4.deps.map(&:name) + assert_equal %w[f1 f2 f3], f4.recursive_dependencies.map(&:name) + assert_equal %w[f2 f3], f4.runtime_dependencies.map(&:name) + end + def test_to_hash f1 = formula("foo") do url "foo-1.0" diff --git a/Library/Homebrew/test/test_tab.rb b/Library/Homebrew/test/test_tab.rb index 2efaee983..18d0f49b1 100644 --- a/Library/Homebrew/test/test_tab.rb +++ b/Library/Homebrew/test/test_tab.rb @@ -16,6 +16,7 @@ class TabTests < Homebrew::TestCase "HEAD" => TEST_SHA1, "compiler" => "clang", "stdlib" => "libcxx", + "runtime_dependencies" => [], "source" => { "tap" => "homebrew/core", "path" => nil, @@ -40,6 +41,7 @@ class TabTests < Homebrew::TestCase assert_nil tab.tap assert_nil tab.time assert_nil tab.HEAD + assert_empty tab.runtime_dependencies assert_nil tab.stable_version assert_nil tab.devel_version assert_nil tab.head_version @@ -95,12 +97,14 @@ class TabTests < Homebrew::TestCase assert_equal TEST_SHA1, tab.HEAD assert_equal :clang, tab.cxxstdlib.compiler assert_equal :libcxx, tab.cxxstdlib.type + assert_empty tab.runtime_dependencies end def test_from_file path = Pathname.new(TEST_DIRECTORY).join("fixtures", "receipt.json") tab = Tab.from_file(path) source_path = "/usr/local/Library/Taps/hombrew/homebrew-core/Formula/foo.rb" + runtime_dependencies = [{ "full_name" => "foo", "version" => "1.0" }] assert_equal @used.sort, tab.used_options.sort assert_equal @unused.sort, tab.unused_options.sort @@ -115,6 +119,7 @@ class TabTests < Homebrew::TestCase assert_equal TEST_SHA1, tab.HEAD assert_equal :clang, tab.cxxstdlib.compiler assert_equal :libcxx, tab.cxxstdlib.type + assert_equal runtime_dependencies, tab.runtime_dependencies assert_equal "2.14", tab.stable_version.to_s assert_equal "2.15", tab.devel_version.to_s assert_equal "HEAD-0000000", tab.head_version.to_s @@ -122,11 +127,32 @@ class TabTests < Homebrew::TestCase end def test_create - f = formula { url "foo-1.0" } + f = formula do + url "foo-1.0" + depends_on "bar" + depends_on "user/repo/from_tap" + depends_on "baz" => :build + end + + tap = Tap.new("user", "repo") + from_tap = formula("from_tap", tap.path/"Formula/from_tap.rb") do + url "from_tap-1.0" + end + stub_formula_loader from_tap + + stub_formula_loader formula("bar") { url "bar-2.0" } + stub_formula_loader formula("baz") { url "baz-3.0" } + compiler = DevelopmentTools.default_compiler stdlib = :libcxx tab = Tab.create(f, compiler, stdlib) + runtime_dependencies = [ + { "full_name" => "bar", "version" => "2.0" }, + { "full_name" => "user/repo/from_tap", "version" => "1.0" }, + ] + + assert_equal runtime_dependencies, tab.runtime_dependencies assert_equal f.path.to_s, tab.source["path"] end @@ -167,6 +193,7 @@ class TabTests < Homebrew::TestCase assert_equal @tab.HEAD, tab.HEAD assert_equal @tab.compiler, tab.compiler assert_equal @tab.stdlib, tab.stdlib + assert_equal @tab.runtime_dependencies, tab.runtime_dependencies assert_equal @tab.stable_version, tab.stable_version assert_equal @tab.devel_version, tab.devel_version assert_equal @tab.head_version, tab.head_version diff --git a/Library/Homebrew/test/testing_env.rb b/Library/Homebrew/test/testing_env.rb index aa89ba2bd..164c812ea 100644 --- a/Library/Homebrew/test/testing_env.rb +++ b/Library/Homebrew/test/testing_env.rb @@ -124,7 +124,7 @@ module Homebrew # Use a stubbed {Formulary::FormulaLoader} to make a given formula be found # when loading from {Formulary} with `ref`. - def stub_formula_loader(formula, ref = formula.name) + def stub_formula_loader(formula, ref = formula.full_name) loader = mock loader.stubs(:get_formula).returns(formula) Formulary.stubs(:loader_for).with(ref).returns(loader) |
