Add support for pacman package version query

- refactor package query logic to be package manager agnostic.

- `pacman -Qo` is the equivalent to `rpm -qf` [1].

[1] https://wiki.archlinux.org/index.php/Pacman/Rosetta#Querying_specific_packages

Signed-off-by: xatier <xatierlike@gmail.com>
This commit is contained in:
xatier 2020-12-16 04:07:46 -08:00
parent 3ac83bf611
commit b6f5163460
No known key found for this signature in database
GPG Key ID: EE2C5C1F7D756A33
1 changed files with 19 additions and 11 deletions

View File

@ -142,29 +142,37 @@ func JSONDeepCopy(from, to interface{}) error {
return json.Unmarshal(tmp, to) return json.Unmarshal(tmp, to)
} }
func dpkgVersion(path string) string { func queryPackageVersion(cmdArg ...string) string {
output := unknownPackage output := unknownPackage
cmd := exec.Command("/usr/bin/dpkg", "-S", path) if 1 < len(cmdArg) {
cmd := exec.Command(cmdArg[0], cmdArg[1:]...)
if outp, err := cmd.Output(); err == nil { if outp, err := cmd.Output(); err == nil {
output = string(outp) output = string(outp)
} }
}
return strings.Trim(output, "\n") return strings.Trim(output, "\n")
} }
func rpmVersion(path string) string { func pacmanVersion(path string) string {
output := unknownPackage return queryPackageVersion("/usr/bin/pacman", "-Qo", path)
cmd := exec.Command("/usr/bin/rpm", "-q", "-f", path)
if outp, err := cmd.Output(); err == nil {
output = string(outp)
} }
return strings.Trim(output, "\n")
func dpkgVersion(path string) string {
return queryPackageVersion("/usr/bin/dpkg", "-S", path)
}
func rpmVersion(path string) string {
return queryPackageVersion("/usr/bin/rpm", "-q", "-f", path)
} }
func packageVersion(program string) string { func packageVersion(program string) string {
if out := rpmVersion(program); out != unknownPackage { if out := rpmVersion(program); out != unknownPackage {
return out return out
} }
return dpkgVersion(program) if out := dpkgVersion(program); out != unknownPackage {
return out
}
return pacmanVersion(program)
} }
func programVersion(mountProgram string) (string, error) { func programVersion(mountProgram string) (string, error) {