aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cmd
diff options
context:
space:
mode:
authorMike McQuaid2016-11-15 08:15:42 +0000
committerGitHub2016-11-15 08:15:42 +0000
commit484e3e0769d9eee760f46afb67fb2ce1bfe6e33d (patch)
tree4223979597492b8e36c7eb21c561fd6bd8a60d15 /Library/Homebrew/cmd
parent30fdbe089b6a7d91dd12132b46436f90dad60c88 (diff)
parentca3562645c30b86da5057cf2f8de9974c4a18413 (diff)
downloadbrew-484e3e0769d9eee760f46afb67fb2ce1bfe6e33d.tar.bz2
Merge pull request #1498 from alyssais/uninstall_developer_warning
Warn developers when uninstalling a dependency
Diffstat (limited to 'Library/Homebrew/cmd')
-rw-r--r--Library/Homebrew/cmd/uninstall.rb83
1 files changed, 64 insertions, 19 deletions
diff --git a/Library/Homebrew/cmd/uninstall.rb b/Library/Homebrew/cmd/uninstall.rb
index d9e6a7377..34695bd1c 100644
--- a/Library/Homebrew/cmd/uninstall.rb
+++ b/Library/Homebrew/cmd/uninstall.rb
@@ -28,10 +28,8 @@ module Homebrew
ARGV.kegs.group_by(&:rack)
end
- if should_check_for_dependents?
- all_kegs = kegs_by_rack.values.flatten(1)
- return if check_for_dependents all_kegs
- end
+ handle_unsatisfied_dependents(kegs_by_rack)
+ return if Homebrew.failed?
kegs_by_rack.each do |rack, kegs|
if ARGV.force?
@@ -78,30 +76,77 @@ module Homebrew
end
end
- def should_check_for_dependents?
- # --ignore-dependencies, to be consistent with install
- return false if ARGV.include?("--ignore-dependencies")
- return false if ARGV.homebrew_developer?
- true
+ def handle_unsatisfied_dependents(kegs_by_rack)
+ return if ARGV.include?("--ignore-dependencies")
+
+ all_kegs = kegs_by_rack.values.flatten(1)
+ check_for_dependents all_kegs
end
def check_for_dependents(kegs)
return false unless result = Keg.find_some_installed_dependents(kegs)
- requireds, dependents = result
-
- msg = "Refusing to uninstall #{requireds.join(", ")} because "
- msg << (requireds.count == 1 ? "it is" : "they are")
- msg << " required by #{dependents.join(", ")}, which "
- msg << (dependents.count == 1 ? "is" : "are")
- msg << " currently installed."
- ofail msg
- print "You can override this and force removal with "
- puts "`brew uninstall --ignore-dependencies #{requireds.map(&:name).join(" ")}`."
+ if ARGV.homebrew_developer?
+ DeveloperDependentsMessage.new(*result).output
+ else
+ NondeveloperDependentsMessage.new(*result).output
+ end
true
end
+ class DependentsMessage
+ attr_reader :reqs, :deps
+
+ def initialize(requireds, dependents)
+ @reqs = requireds
+ @deps = dependents
+ end
+
+ protected
+
+ def are(items)
+ items.count == 1 ? "is" : "are"
+ end
+
+ def they(items)
+ items.count == 1 ? "it" : "they"
+ end
+
+ def list(items)
+ items.join(", ")
+ end
+
+ def sample_command
+ "brew uninstall --ignore-dependencies #{list reqs.map(&:name)}"
+ end
+
+ def are_required_by_deps
+ "#{are reqs} required by #{list deps}, which #{are deps} currently installed"
+ end
+ end
+
+ class DeveloperDependentsMessage < DependentsMessage
+ def output
+ opoo <<-EOS.undent
+ #{list reqs} #{are_required_by_deps}.
+ You can silence this warning with:
+ #{sample_command}
+ EOS
+ end
+ end
+
+ class NondeveloperDependentsMessage < DependentsMessage
+ def output
+ ofail <<-EOS.undent
+ Refusing to uninstall #{list reqs}
+ because #{they reqs} #{are_required_by_deps}.
+ You can override this and force removal with:
+ #{sample_command}
+ EOS
+ end
+ end
+
def rm_pin(rack)
Formulary.from_rack(rack).unpin
rescue