diff options
| author | Alyssa Ross | 2016-09-19 20:53:39 +0100 | 
|---|---|---|
| committer | Alyssa Ross | 2016-09-19 20:53:39 +0100 | 
| commit | 41e25209f7486676f633ae05d7fc61e05af07b90 (patch) | |
| tree | 46f0741b7dedc0bd54b52ddcd12eba89aabb71df | |
| parent | e22610aedd550cb5577dd08cedb7a5609d0ff0b8 (diff) | |
| download | brew-41e25209f7486676f633ae05d7fc61e05af07b90.tar.bz2 | |
Save runtime dependencies in INSTALL_RECEIPT.json
Fixes #930
| -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 | 19 | 
5 files changed, 58 insertions, 1 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..ea4936c4b 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,22 @@ 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 "baz" => :build +    end + +    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" }] + +    assert_equal runtime_dependencies, tab.runtime_dependencies      assert_equal f.path.to_s, tab.source["path"]    end @@ -167,6 +183,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  | 
