{"record":{"id":"111e2054fa18607f","repo":"Devolutions/UniGetUI","slug":"pacman-does-not-support-installing-arbitrary-versi","errorCode":null,"errorMessage":"Pacman does not support installing arbitrary versions","messagePattern":"Pacman does not support installing arbitrary versions","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"warning","filePath":"src/UniGetUI.PackageEngine.Managers.Pacman/Helpers/PacmanPkgDetailsHelper.cs","lineNumber":166,"sourceCode":"        string? result = null;\n        string? line;\n        while ((line = p.StandardOutput.ReadLine()) is not null)\n        {\n            if (result is not null) continue;\n            var spaceIdx = line.IndexOf(' ');\n            if (spaceIdx < 0) continue;\n            var path = line[(spaceIdx + 1)..].Trim();\n            if (Directory.Exists(path))\n                result = path;\n        }\n\n        p.StandardError.ReadToEnd();\n        p.WaitForExit();\n        return result;\n    }\n\n    protected override IReadOnlyList<string> GetInstallableVersions_UnSafe(IPackage package)\n        => throw new InvalidOperationException(\"Pacman does not support installing arbitrary versions\");\n\n    private static long ParsePacmanSize(string value)\n    {\n        // Format: \"2.34 MiB\", \"234.56 KiB\", \"1.20 GiB\"\n        var parts = value.Split(' ');\n        if (parts.Length < 2 || !double.TryParse(parts[0],\n                System.Globalization.NumberStyles.Any,\n                System.Globalization.CultureInfo.InvariantCulture, out var num))\n            return 0;\n\n        return parts[1] switch\n        {\n            \"KiB\" or \"kB\" => (long)(num * 1024),\n            \"MiB\" or \"MB\" => (long)(num * 1024 * 1024),\n            \"GiB\" or \"GB\" => (long)(num * 1024 * 1024 * 1024),\n            _ => (long)num,\n        };\n    }","sourceCodeStart":148,"sourceCodeEnd":184,"githubUrl":"https://github.com/Devolutions/UniGetUI/blob/9b1d7d0eab91620fc15c86b36676532095936ae3/src/UniGetUI.PackageEngine.Managers.Pacman/Helpers/PacmanPkgDetailsHelper.cs#L148-L184","documentation":"Pacman's GetInstallableVersions_UnSafe unconditionally throws InvalidOperationException. Pacman resolves versions from synced repositories and does not provide an arbitrary installable-version list.","triggerScenarios":"Any code path requesting installable versions for a Pacman package (version picker, pre-install resolution).","commonSituations":"UI version dropdown for an Arch/pacman package; automation expecting a version list.","solutions":["Gate version requests on the capability flag for Pacman.","Install via the repository version without a version pin.","Catch InvalidOperationException and surface only the current version."],"exampleFix":"// before\nvar versions = await pkg.GetInstallableVersionsAsync(); // throws for pacman\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 Pacman.","Install via the repository version without a pin.","Hide the version picker for Arch packages."],"tags":["pacman","arch","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"}