diff --git a/Library/Homebrew/cask/artifact/symlinked.rb b/Library/Homebrew/cask/artifact/symlinked.rb index fd40619fadfc77ebce14b96c2cca5b8ae289b191..1feeda027ad359269b38c40f2a5e625b4c0254b3 100644 --- a/Library/Homebrew/cask/artifact/symlinked.rb +++ b/Library/Homebrew/cask/artifact/symlinked.rb @@ -40,7 +40,7 @@ module Cask private - def link(**options) + def link(force: false, **options) unless source.exist? raise CaskError, "It seems the #{self.class.link_type_english_name.downcase} " \ @@ -48,9 +48,16 @@ module Cask end if target.exist? - raise CaskError, - "It seems there already exists #{self.class.english_article} " \ - "#{self.class.english_name} at '#{target}'; not overwriting." + message = "It seems there is already #{self.class.english_article} " \ + "#{self.class.english_name} at '#{target}'" + + if force && target.symlink? && \ + (target.realpath == source.realpath || target.realpath.to_s.start_with?("#{cask.caskroom_path}/")) + opoo "#{message}; overwriting." + target.delete + else + raise CaskError, "#{message}." + end end ohai "Linking #{self.class.english_name} '#{source.basename}' to '#{target}'."