From 4e37f2ad255f2cff1d7dc045b74d7a829b814308 Mon Sep 17 00:00:00 2001 From: Douglas Eichelberger Date: Mon, 2 Feb 2026 04:00:23 -0800 Subject: [PATCH] Fix Cleanup.stale_version? logic --- Library/Homebrew/cleanup.rb | 6 ++++-- Library/Homebrew/test/cleanup_spec.rb | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/cleanup.rb b/Library/Homebrew/cleanup.rb index 7c0cc42256..4c66a32ffe 100644 --- a/Library/Homebrew/cleanup.rb +++ b/Library/Homebrew/cleanup.rb @@ -166,8 +166,10 @@ module Homebrew return true if (bottle = formula.bottle).blank? - version = bottle.resource.version - version && version != GitHubPackages.version_rebuild(version, bottle.rebuild) + resource_version = bottle.resource.version + return false unless resource_version + + return resource_version != GitHubPackages.version_rebuild(resource_version, bottle.rebuild) end return false if formula.blank? diff --git a/Library/Homebrew/test/cleanup_spec.rb b/Library/Homebrew/test/cleanup_spec.rb index ab97061c8d..5e36b1dbba 100644 --- a/Library/Homebrew/test/cleanup_spec.rb +++ b/Library/Homebrew/test/cleanup_spec.rb @@ -444,6 +444,22 @@ RSpec.describe Homebrew::Cleanup do expect(testball_resource).not_to exist end end + + it "does not remove bottle manifests for the latest installed version when using GitHub Packages" do + manifest = HOMEBREW_CACHE/"foo_bottle_manifest--1.0.json" + FileUtils.touch manifest + + resource = instance_double(Resource, version: Version.new("1.0.arm64_sonoma")) + bottle = instance_double(Bottle, resource:, rebuild: 0) + formula = instance_double(Formula, latest_version_installed?: true, bottle:) + + allow(Formulary).to receive(:from_rack).and_return(nil, formula) + allow(described_class).to receive(:excluded_versions_from_cleanup).with(formula).and_return([]) + + cleanup.cleanup_cache + + expect(manifest).to exist + end end describe "::cleanup_python_site_packages" do