aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
authorMisty De Meo2012-07-28 13:02:46 -0300
committerMisty De Meo2012-07-30 13:47:12 -0300
commit0c237a86797eabd181b5dd889e8981ab1648320e (patch)
treefbf00f2ce82d9f05971ab8ef289a9173d2ee2468 /Library/Homebrew
parent6a8c4843f773efb62f9ec0b658837be50ec9d632 (diff)
downloadbrew-0c237a86797eabd181b5dd889e8981ab1648320e.tar.bz2
Add conflicts_with DSL method
conflicts_with is a thin wrapper around Requirement which simplifies marking conflicts between formulae. Closes Homebrew/homebrew#13687. Signed-off-by: Misty De Meo <mistydemeo@gmail.com>
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/cmd/info.rb5
-rw-r--r--Library/Homebrew/dependencies.rb20
-rw-r--r--Library/Homebrew/formula.rb15
3 files changed, 40 insertions, 0 deletions
diff --git a/Library/Homebrew/cmd/info.rb b/Library/Homebrew/cmd/info.rb
index 079794f27..0489a02e0 100644
--- a/Library/Homebrew/cmd/info.rb
+++ b/Library/Homebrew/cmd/info.rb
@@ -68,6 +68,11 @@ module Homebrew extend self
end
puts "Depends on: #{f.deps*', '}" unless f.deps.empty?
+ conflicts = []
+ f.external_deps.each do |dep|
+ conflicts << dep.formula if dep.is_a? ConflictRequirement
+ end
+ puts "Conflicts with: #{conflicts*', '}" unless conflicts.empty?
if f.rack.directory?
kegs = f.rack.children
diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb
index de9ed9207..9493c623b 100644
--- a/Library/Homebrew/dependencies.rb
+++ b/Library/Homebrew/dependencies.rb
@@ -287,3 +287,23 @@ class MPIDependency < Requirement
end
end
+
+class ConflictRequirement < Requirement
+ attr_reader :formula
+
+ def initialize formula, message
+ @formula = formula
+ @message = message
+ end
+
+ def message; @message; end
+
+ def satisfied?
+ keg = Formula.factory(@formula).prefix
+ not keg.exist? && Keg.new(keg).linked?
+ end
+
+ def fatal?
+ not ARGV.force?
+ end
+end
diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb
index e91fe388e..061fa5bd4 100644
--- a/Library/Homebrew/formula.rb
+++ b/Library/Homebrew/formula.rb
@@ -626,6 +626,21 @@ private
dependencies.add(dep)
end
+ def conflicts_with formula, opts={}
+ message = <<-EOS.undent
+ #{formula} cannot be installed alongside #{name.downcase}.
+ EOS
+ message << "This is because #{opts[:reason]}\n" if opts[:reason]
+ if !ARGV.force? then message << <<-EOS.undent
+ Please `brew unlink` or `brew uninstall` #{formula} before continuing.
+ To install anyway, use:
+ brew install --force
+ EOS
+ end
+
+ dependencies.add ConflictRequirement.new(formula, message)
+ end
+
def skip_clean paths
if paths == :all
@skip_clean_all = true