MCPcopy
hub / github.com/PatchMon/PatchMon / GetPackages

Method GetPackages

agent-source-code/internal/packages/pacman.go:42–81  ·  view source on GitHub ↗

GetPackages gets package information for pacman-based systems

()

Source from the content-addressed store, hash-verified

40
41// GetPackages gets package information for pacman-based systems
42func (m *PacmanManager) GetPackages() ([]models.Package, error) {
43 // Get installed packages with repo info from pacman -Sl
44 installedPackages := m.parseInstalledFromSyncList()
45
46 // Get foreign/AUR packages from pacman -Qm
47 foreignPkgs := m.getForeignPackages()
48 for name, fp := range foreignPkgs {
49 installedPackages[name] = fp
50 }
51
52 upgradablePackages, err := m.getUpgradablePackages()
53 if err != nil {
54 return nil, err
55 }
56
57 // Build package map for CombinePackageData
58 pkgMap := make(map[string]models.Package, len(installedPackages))
59 for name, ip := range installedPackages {
60 pkgMap[name] = models.Package{
61 Name: name,
62 CurrentVersion: ip.version,
63 NeedsUpdate: false,
64 SourceRepository: ip.repo,
65 }
66 }
67
68 // Merge and deduplicate packages
69 packages := CombinePackageData(pkgMap, upgradablePackages)
70
71 // Carry over SourceRepository from installed data to final packages
72 for i := range packages {
73 if packages[i].SourceRepository == "" {
74 if ip, ok := installedPackages[packages[i].Name]; ok {
75 packages[i].SourceRepository = ip.repo
76 }
77 }
78 }
79
80 return packages, nil
81}
82
83// parseInstalledFromSyncList runs pacman -Sl and returns installed packages with their repo names.
84// pacman -Sl output format: <repo> <name> <version> [installed] or [installed: <local-version>]

Callers

nothing calls this directly

Calls 4

getForeignPackagesMethod · 0.95
getUpgradablePackagesMethod · 0.95
CombinePackageDataFunction · 0.85

Tested by

no test coverage detected