pm ls <pkg> lists installed files

Fixes #13
This commit is contained in:
Stephen McQuay 2018-05-07 21:10:28 -07:00
parent 51c8c920a3
commit 9ceb1865f9
Signed by untrusted user: sm
GPG Key ID: C383C74875475AC8
2 changed files with 47 additions and 2 deletions

View File

@ -235,8 +235,14 @@ func main() {
fatalf("installing: %v\n", err) fatalf("installing: %v\n", err)
} }
case "ls": case "ls":
if err := db.ListInstalled(root, os.Stdout); err != nil { if len(os.Args[1:]) == 1 {
fatalf("listing installed: %v\n", err) if err := db.ListInstalled(root, os.Stdout); err != nil {
fatalf("listing installed: %v\n", err)
}
} else {
if err := db.ListInstalledFiles(root, os.Stdout, os.Args[2:]); err != nil {
fatalf("listing installed: %v\n", err)
}
} }
case "rm": case "rm":
if len(os.Args[1:]) < 2 { if len(os.Args[1:]) < 2 {

View File

@ -6,6 +6,7 @@ import (
"io" "io"
"os" "os"
"path/filepath" "path/filepath"
"sort"
"github.com/pkg/errors" "github.com/pkg/errors"
"mcquay.me/fs" "mcquay.me/fs"
@ -58,6 +59,44 @@ func ListInstalled(root string, w io.Writer) error {
return nil return nil
} }
// ListInstalledFiles prints the contents of a package.
func ListInstalledFiles(root string, w io.Writer, names []string) error {
for _, name := range names {
ok, err := IsInstalled(root, pm.Meta{Name: pm.Name(name)})
if err != nil {
return errors.Wrap(err, "is installed")
}
if !ok {
return fmt.Errorf("%v not installed", name)
}
}
for _, name := range names {
fn := filepath.Join(root, "var", "lib", "pm", "installed", name, "bom.sha256")
f, err := os.Open(fn)
if err != nil {
return errors.Wrapf(err, "opening %v's bom", name)
}
bom, err := pm.ParseCS(f)
if err != nil {
return errors.Wrapf(err, "parsing %v's bom", name)
}
if err := f.Close(); err != nil {
return errors.Wrapf(err, "closing %v's bom", name)
}
ks := []string{}
for k := range bom {
ks = append(ks, k)
}
sort.Strings(ks)
for _, k := range ks {
fmt.Fprintf(w, "%v\n", k)
}
}
return nil
}
func LoadInstalled(root string) (pm.Installed, error) { func LoadInstalled(root string) (pm.Installed, error) {
return loadi(root) return loadi(root)
} }