Implement conflicts_with :cask.

This commit is contained in:
Markus Reiter 2017-08-05 15:56:34 +02:00
parent 42cfb6d238
commit 67327c75b5
3 changed files with 37 additions and 12 deletions

View File

@ -10,25 +10,20 @@ module Hbc
:java,
]
attr_accessor(*VALID_KEYS)
attr_accessor :pairs
attr_reader *VALID_KEYS
def initialize(pairs = {})
@pairs = pairs
VALID_KEYS.each do |key|
instance_variable_set("@#{key}", Set.new)
end
pairs.each do |key, value|
raise "invalid conflicts_with key: '#{key.inspect}'" unless VALID_KEYS.include?(key)
writer_method = "#{key}=".to_sym
send(writer_method, value)
instance_variable_set("@#{key}", instance_variable_get("@#{key}").merge([*value]))
end
end
def to_yaml
@pairs.to_yaml
end
def to_s
@pairs.inspect
end
end
end
end

View File

@ -17,6 +17,19 @@ module Hbc
end
end
class CaskConflictError < AbstractCaskErrorWithToken
attr_reader :conflicting_cask
def initialize(token, conflicting_cask)
super(token)
@conflicting_cask = conflicting_cask
end
def to_s
"Cask '#{token}' conflicts with '#{conflicting_cask}'."
end
end
class CaskUnavailableError < AbstractCaskErrorWithToken
def to_s
"Cask '#{token}' is unavailable" << (reason.empty? ? "." : ": #{reason}")

View File

@ -86,6 +86,8 @@ module Hbc
raise CaskAlreadyInstalledError, @cask
end
check_conflicts
print_caveats
fetch
uninstall_existing_cask if @reinstall
@ -98,6 +100,21 @@ module Hbc
puts summary
end
def check_conflicts
return unless @cask.conflicts_with
@cask.conflicts_with.cask.each do |conflicting_cask|
begin
conflicting_cask = CaskLoader.load(conflicting_cask)
if conflicting_cask.installed?
raise CaskConflictError.new(@cask, conflicting_cask)
end
rescue CaskUnavailableError
next # Ignore conflicting Casks that do not exist.
end
end
end
def reinstall
odebug "Hbc::Installer#reinstall"
@reinstall = true