Overwrite broken symlinks with --overwrite
Closes Homebrew/homebrew#19480. Signed-off-by: Misty De Meo <mistydemeo@gmail.com>
This commit is contained in:
parent
4312f94013
commit
ba93e6d363
@ -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:
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user