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() {