cleanup: remove broken symlink for uninstalled migrated Casks

Signed-off-by: Michael Cho <michael@michaelcho.dev>
This commit is contained in:
Michael Cho 2024-03-10 19:25:00 -04:00
parent 857838ab7a
commit 3ddc196f11
No known key found for this signature in database
GPG Key ID: 55E85E28A7CD1E85
2 changed files with 28 additions and 0 deletions

View File

@ -634,6 +634,20 @@ module Homebrew
end
end
require "cask/caskroom"
if Cask::Caskroom.path.directory?
Cask::Caskroom.path.each_child do |path|
path.extend(ObserverPathnameExtension)
next if !path.symlink? || path.resolved_path_exists?
if dry_run?
puts "Would remove (broken link): #{path}"
else
path.unlink
end
end
end
return if dry_run?
return if ObserverPathnameExtension.total.zero?

View File

@ -163,6 +163,20 @@ RSpec.describe Homebrew::Cleanup do
expect(grandchild_dir).to exist
end
end
it "removes broken symlinks for uninstalled migrated Casks" do
caskroom = Cask::Caskroom.path
old_cask_dir = caskroom/"old"
new_cask_dir = caskroom/"new"
unrelated_cask_dir = caskroom/"other"
unrelated_cask_dir.mkpath
FileUtils.ln_s new_cask_dir, old_cask_dir
cleanup.prune_prefix_symlinks_and_directories
expect(unrelated_cask_dir).to exist
expect(old_cask_dir).not_to be_a_symlink
expect(old_cask_dir).not_to exist
end
end
specify "::cleanup_formula" do