aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
Diffstat (limited to 'Library')
-rwxr-xr-xLibrary/Homebrew/build.rb2
-rw-r--r--Library/Homebrew/dependency.rb7
-rw-r--r--Library/Homebrew/test/test_dependency_expansion.rb13
3 files changed, 22 insertions, 0 deletions
diff --git a/Library/Homebrew/build.rb b/Library/Homebrew/build.rb
index 8a4267bac..e75a6841e 100755
--- a/Library/Homebrew/build.rb
+++ b/Library/Homebrew/build.rb
@@ -100,6 +100,8 @@ class Build
Dependency.prune
elsif dep.build? && dependent != f
Dependency.prune
+ elsif dep.build?
+ Dependency.keep_but_prune_recursive_deps
end
end
end
diff --git a/Library/Homebrew/dependency.rb b/Library/Homebrew/dependency.rb
index df22eed90..fda491b99 100644
--- a/Library/Homebrew/dependency.rb
+++ b/Library/Homebrew/dependency.rb
@@ -82,6 +82,8 @@ class Dependency
next []
when :skip
expand(dep.to_formula, &block)
+ when :keep_but_prune_recursive_deps
+ [dep]
else
expand(dep.to_formula, &block) << dep
end
@@ -110,6 +112,11 @@ class Dependency
throw(:action, :skip)
end
+ # Keep a dependency, but prune its dependencies
+ def keep_but_prune_recursive_deps
+ throw(:action, :keep_but_prune_recursive_deps)
+ end
+
def merge_repeats(deps)
grouped = deps.group_by(&:name)
diff --git a/Library/Homebrew/test/test_dependency_expansion.rb b/Library/Homebrew/test/test_dependency_expansion.rb
index 90d4dcc36..cf22b6170 100644
--- a/Library/Homebrew/test/test_dependency_expansion.rb
+++ b/Library/Homebrew/test/test_dependency_expansion.rb
@@ -95,4 +95,17 @@ class DependencyExpansionTests < Test::Unit::TestCase
assert_equal [@bar, @baz], deps
end
+
+ def test_keep_dep_but_prune_recursive_deps
+ f = stub(:deps => [
+ build_dep(:foo, [:build], [@bar]),
+ build_dep(:baz, [:build]),
+ ])
+
+ deps = Dependency.expand(f) do |dependent, dep|
+ Dependency.keep_but_prune_recursive_deps if dep.build?
+ end
+
+ assert_equal [@foo, @baz], deps
+ end
end