1
0
mirror of https://github.com/Luzifer/password.git synced 2024-09-20 02:42:57 +00:00
password/vendor/github.com/tredoe/osutil/pkgutil/pkg.go

113 lines
2.3 KiB
Go
Raw Normal View History

// Copyright 2012 Jonas mg
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Package pkgutil handles basic operations in the management of packages in
// operating systems.
//
// Important
//
// If you are going to use a package manager different to Deb, then you should
// check the options since I cann't test all.
//
// TODO
//
// Add managers of BSD systems.
//
// Use flag to do not show questions.
package pkgutil
import (
"errors"
"os/exec"
)
// Packager is the common interface to handle different package systems.
type Packager interface {
// Install installs packages.
Install(name ...string) error
// Remove removes packages.
Remove(name ...string) error
// Purge removes packages and its configuration files.
Purge(name ...string) error
// Update resynchronizes the package index files from their sources.
Update() error
// Upgrade upgrades all the packages on the system.
Upgrade() error
// Clean erases both packages downloaded and orphaned dependencies.
Clean() error
}
// PackageType represents a package management system.
type PackageType int8
const (
// Linux
Deb PackageType = iota + 1
RPM
Pacman
Ebuild
ZYpp
)
func (pkg PackageType) String() string {
switch pkg {
case Deb:
return "Deb"
case RPM:
return "RPM"
case Pacman:
return "Pacman"
case Ebuild:
return "Ebuild"
case ZYpp:
return "ZYpp"
}
panic("unreachable")
}
// New returns the interface to handle the package manager.
func New(pkg PackageType) Packager {
switch pkg {
case Deb:
return new(deb)
case RPM:
return new(rpm)
case Pacman:
return new(pacman)
case Ebuild:
return new(ebuild)
case ZYpp:
return new(zypp)
}
panic("unreachable")
}
// execPackagers is a list of executables of package managers.
var execPackagers = [...]string{
Deb: "apt-get",
RPM: "yum",
Pacman: "pacman",
Ebuild: "emerge",
ZYpp: "zypper",
}
// Detect tries to get the package system used in the system, looking for
// executables in directory "/usr/bin".
func Detect() (PackageType, error) {
for k, v := range execPackagers {
_, err := exec.LookPath("/usr/bin/" + v)
if err == nil {
return PackageType(k), nil
}
}
return -1, errors.New("package manager not found in directory '/usr/bin'")
}