From 3ddc196f1139d1f33431174b65a878e682a0b313 Mon Sep 17 00:00:00 2001 From: Michael Cho Date: Sun, 10 Mar 2024 19:25:00 -0400 Subject: [PATCH] cleanup: remove broken symlink for uninstalled migrated Casks Signed-off-by: Michael Cho --- Library/Homebrew/cleanup.rb | 14 ++++++++++++++ Library/Homebrew/test/cleanup_spec.rb | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/Library/Homebrew/cleanup.rb b/Library/Homebrew/cleanup.rb index 8d0c9e9f4426d..77db17afcc80f 100644 --- a/Library/Homebrew/cleanup.rb +++ b/Library/Homebrew/cleanup.rb @@ -634,6 +634,20 @@ def prune_prefix_symlinks_and_directories 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? diff --git a/Library/Homebrew/test/cleanup_spec.rb b/Library/Homebrew/test/cleanup_spec.rb index b166364594fb1..e622a1d8be1c3 100644 --- a/Library/Homebrew/test/cleanup_spec.rb +++ b/Library/Homebrew/test/cleanup_spec.rb @@ -163,6 +163,20 @@ 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