{"record":{"id":"f9b4ffb290cc6ddb","repo":"Devolutions/UniGetUI","slug":"homebrew-does-not-support-installing-arbitrary-ver","errorCode":null,"errorMessage":"Homebrew does not support installing arbitrary versions","messagePattern":"Homebrew does not support installing arbitrary versions","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"warning","filePath":"src/UniGetUI.PackageEngine.Managers.Homebrew/Helpers/HomebrewPkgDetailsHelper.cs","lineNumber":122,"sourceCode":"\n    protected override string? GetInstallLocation_UnSafe(IPackage package)\n    {\n        // Apple Silicon prefix is /opt/homebrew, Intel/Linux is /usr/local (or /home/linuxbrew).\n        // Formulae live under Cellar/<name>, casks under Caskroom/<token>.\n        foreach (var prefix in new[] { \"/opt/homebrew\", \"/usr/local\", \"/home/linuxbrew/.linuxbrew\" })\n        {\n            foreach (var kind in new[] { \"Cellar\", \"Caskroom\" })\n            {\n                var path = Path.Join(prefix, kind, package.Id);\n                if (Directory.Exists(path))\n                    return path;\n            }\n        }\n        return null;\n    }\n\n    protected override IReadOnlyList<string> GetInstallableVersions_UnSafe(IPackage package)\n        => throw new InvalidOperationException(\"Homebrew does not support installing arbitrary versions\");\n}\n","sourceCodeStart":104,"sourceCodeEnd":124,"githubUrl":"https://github.com/Devolutions/UniGetUI/blob/9b1d7d0eab91620fc15c86b36676532095936ae3/src/UniGetUI.PackageEngine.Managers.Homebrew/Helpers/HomebrewPkgDetailsHelper.cs#L104-L124","documentation":"Homebrew's GetInstallableVersions_UnSafe unconditionally throws InvalidOperationException. Homebrew installs the current formula/cask head and does not expose a selectable version catalog, so arbitrary-version listing is unsupported.","triggerScenarios":"Any code path requesting installable versions for a Homebrew package (version picker, pre-install resolution).","commonSituations":"UI version dropdown for a brew formula/cask; automation expecting a version list.","solutions":["Gate version requests on the capability flag for Homebrew.","Install the current formula/cask without a version pin.","Catch InvalidOperationException and surface only the installed version."],"exampleFix":"// before\nvar versions = await pkg.GetInstallableVersionsAsync(); // throws for brew\n// after\nif (pkg.Manager.Capabilities.SupportsArbitraryVersions)\n    versions = await pkg.GetInstallableVersionsAsync();\nelse\n    versions = [pkg.Version];","handlingStrategy":"validation","validationCode":"if (package.Manager.Capabilities.SupportsArbitraryVersions)\n    versions = package.GetInstallableVersionsAsync();\nelse\n    versions = new[] { package.Version };","typeGuard":"static bool CanListVersions(IPackage pkg) =>\n    pkg.Manager.Capabilities.SupportsArbitraryVersions;","tryCatchPattern":null,"preventionTips":["Gate version requests on the capability flag for Homebrew.","Install the current formula/cask without a version pin.","Hide the version picker for brew packages."],"tags":["homebrew","capability-not-supported","versions","package-manager"],"backgroundTag":null,"analyzedSha":"9b1d7d0eab91620fc15c86b36676532095936ae3","analyzedAt":"2026-08-13T12:19:18.278Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}