Overwrite broken symlinks with --overwrite

Closes Homebrew/homebrew#19480.

Signed-off-by: Misty De Meo <mistydemeo@gmail.com>
This commit is contained in:
Desmond Brand 2013-04-27 15:21:17 -07:00 committed by Misty De Meo
parent 4312f94013
commit ba93e6d363
3 changed files with 25 additions and 3 deletions

View File

@ -264,7 +264,20 @@ class Pathname
raise <<-EOS.undent
Could not symlink file: #{src.expand_path}
Target #{self} already exists. You may need to delete it.
To force the link and delete this file, do:
To force the link and overwrite all other conflicting files, do:
brew link --overwrite formula_name
To list all files that would be deleted:
brew link --overwrite --dry-run formula_name
EOS
# #exist? will return false for symlinks whose target doesn't exist
elsif self.symlink?
raise <<-EOS.undent
Could not symlink file: #{src.expand_path}
Target #{self} already exists as a symlink to #{readlink}.
If this file is from another formula, you may need to
`brew unlink` it. Otherwise, you may want to delete it.
To force the link and overwrite all other conflicting files, do:
brew link --overwrite formula_name
To list all files that would be deleted:

View File

@ -194,14 +194,14 @@ class Keg < Pathname
puts "Skipping; already exists: #{dst}" if ARGV.verbose?
# cf. git-clean -n: list files to delete, don't really link or delete
elsif mode.dry_run and mode.overwrite
puts dst if dst.exist?
puts dst if dst.exist? or dst.symlink?
return
# list all link targets
elsif mode.dry_run
puts dst
return
else
dst.delete if mode.overwrite && dst.exist?
dst.delete if mode.overwrite && (dst.exist? or dst.symlink?)
dst.make_relative_symlink src
end
end

View File

@ -61,6 +61,15 @@ class LinkTests < Test::Unit::TestCase
assert_equal 3, @keg.link(mode)
end
def test_link_overwrite_broken_symlinks
FileUtils.cd HOMEBREW_PREFIX/"bin" do
FileUtils.ln_s "nowhere", "helloworld"
end
mode = OpenStruct.new
mode.overwrite = true
assert_equal 3, @keg.link(mode)
end
def test_link_overwrite_dryrun
FileUtils.touch HOMEBREW_PREFIX/"bin/helloworld"
mode = OpenStruct.new