From af220a4ee644d10a2bffe603ff16e4ddbf3683f7 Mon Sep 17 00:00:00 2001 From: maxsoch Date: Tue, 14 Jul 2026 18:02:46 +0200 Subject: [PATCH] strip the build-id suffix from cask version labels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some casks (claude and others) version themselves as "user-facing-version,build-id" — the hash after the comma only feeds brew's own download URL and was never meant for display, but showed up verbatim in the Outdated menu. displayVersion() now truncates at the first comma for both the installed and target version shown in the label; brew commands are unaffected since they operate on the package name, never this string. Co-Authored-By: Claude Fable 5 --- BrewBar/BrewParser.swift | 11 +++++++++-- BrewBarTests/BrewBarTests.swift | 9 +++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/BrewBar/BrewParser.swift b/BrewBar/BrewParser.swift index e68fbad..7e6ce6b 100644 --- a/BrewBar/BrewParser.swift +++ b/BrewBar/BrewParser.swift @@ -7,8 +7,15 @@ struct OutdatedPackage: Codable, Equatable { /// Menu label, e.g. "wget 1.21 → 1.22" var label: String { - let installed = installedVersions.joined(separator: ", ") - return "\(name) \(installed) → \(currentVersion)" + let installed = installedVersions.map(Self.displayVersion).joined(separator: ", ") + return "\(name) \(installed) → \(Self.displayVersion(currentVersion))" + } + + /// Some casks (e.g. claude: "1.20186.9,69f150a4c9…") version themselves + /// as "user-facing-version,build-id" — the part after the comma only + /// matters for brew's own download URL, never for display. + static func displayVersion(_ version: String) -> String { + String(version.split(separator: ",", maxSplits: 1)[0]) } } diff --git a/BrewBarTests/BrewBarTests.swift b/BrewBarTests/BrewBarTests.swift index 8cd9f62..5cfde8d 100644 --- a/BrewBarTests/BrewBarTests.swift +++ b/BrewBarTests/BrewBarTests.swift @@ -64,6 +64,15 @@ final class BrewParserTests: XCTestCase { XCTAssertEqual(package.label, "wget 1.21.3 → 1.21.4") } + func testParseOutdatedJSON_packageLabel_stripsBuildIdAfterComma() { + let package = OutdatedPackage( + name: "claude", + installedVersions: ["1.20185.0,5e8f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f"], + currentVersion: "1.20186.9,69f150a4c9316d5c8cd7b9f130ed583d15c0383e" + ) + XCTAssertEqual(package.label, "claude 1.20185.0 → 1.20186.9") + } + // MARK: - parseVersion func testParseVersion_picksFirstLine() {