mirror of
https://github.com/gogrlx/snack.git
synced 2026-04-02 05:08:42 -07:00
- Common Manager interface, Package type, functional options - Sentinel errors for common package manager failures - Sub-package stubs for: pacman, aur, apk, apt, dpkg, dnf, rpm, flatpak, snap, pkg (FreeBSD), ports (OpenBSD) - detect/ package for auto-detection of system package manager - 0BSD license
44 lines
1.0 KiB
Go
44 lines
1.0 KiB
Go
// Package detect provides auto-detection of the system's available package manager.
|
|
package detect
|
|
|
|
import (
|
|
"os/exec"
|
|
|
|
"github.com/gogrlx/snack"
|
|
)
|
|
|
|
// probeOrder defines the order in which package managers are probed.
|
|
// The first available manager wins.
|
|
var probeOrder = []struct {
|
|
name string
|
|
bin string
|
|
}{
|
|
{"pacman", "pacman"},
|
|
{"apk", "apk"},
|
|
{"apt", "apt-get"},
|
|
{"dnf", "dnf"},
|
|
{"rpm", "rpm"},
|
|
{"flatpak", "flatpak"},
|
|
{"snap", "snap"},
|
|
{"pkg", "pkg"},
|
|
}
|
|
|
|
// Default returns the first available package manager on the system.
|
|
// Returns ErrManagerNotFound if no supported manager is detected.
|
|
func Default() (snack.Manager, error) {
|
|
// TODO: implement — probe for each manager in order, return first match
|
|
return nil, snack.ErrManagerNotFound
|
|
}
|
|
|
|
// All returns all available package managers on the system.
|
|
func All() []snack.Manager {
|
|
// TODO: implement
|
|
return nil
|
|
}
|
|
|
|
// HasBinary reports whether a binary is available in PATH.
|
|
func HasBinary(name string) bool {
|
|
_, err := exec.LookPath(name)
|
|
return err == nil
|
|
}
|