tmp.pkginfo/main.go

63 lines
1.2 KiB
Go

package main
import (
"encoding/json"
"fmt"
"os"
"strings"
"github.com/sassoftware/go-rpmutils"
log "github.com/sirupsen/logrus"
"pault.ag/go/debian/deb"
)
func main() {
for _, arg := range os.Args[1:] {
var buf []byte
var err error
// XXX no all data will come from a package _file_.
// like, from Flatcar's gentoo ebuilds. That current script just walks the /var/db/pkg/ tree for metadata
// this may want to query local dpkg or rpm database.
// or even a yum or debian remote repo?
switch {
case strings.HasSuffix(arg, ".deb"):
buf, err = getDebInfo(arg)
case strings.HasSuffix(arg, ".rpm"):
buf, err = getRPMInfo(arg)
}
if err != nil {
log.Fatal(err)
}
fmt.Println(string(buf))
}
}
func getRPMInfo(rpmfile string) ([]byte, error) {
f, err := os.Open(rpmfile)
if err != nil {
return nil, err
}
defer f.Close()
rpm, err := rpmutils.ReadRpm(f)
if err != nil {
return nil, err
}
nevra, err := rpm.Header.GetNEVRA()
if err != nil {
return nil, err
}
return json.MarshalIndent(nevra, "", " ")
}
func getDebInfo(debfile string) ([]byte, error) {
d, cl, err := deb.LoadFile(debfile)
if err != nil {
return nil, err
}
defer cl()
return json.MarshalIndent(d.Control, "", " ")
}