63 lines
1.2 KiB
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, "", " ")
|
||
|
}
|