Adds pm rm
This commit is contained in:
parent
f07b5a7d0e
commit
51c8c920a3
22
cs.go
Normal file
22
cs.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package pm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ParseCS returns a parsed checksum file.
|
||||||
|
func ParseCS(f io.Reader) (map[string]string, error) {
|
||||||
|
cs := map[string]string{}
|
||||||
|
s := bufio.NewScanner(f)
|
||||||
|
for s.Scan() {
|
||||||
|
elems := strings.Split(s.Text(), "\t")
|
||||||
|
if len(elems) != 2 {
|
||||||
|
return nil, fmt.Errorf("manifest format error; got %d elements, want 2", len(elems))
|
||||||
|
}
|
||||||
|
cs[elems[1]] = elems[0]
|
||||||
|
}
|
||||||
|
return cs, nil
|
||||||
|
}
|
@ -24,6 +24,16 @@ func AddInstalled(root string, m pm.Meta) error {
|
|||||||
return savei(root, db)
|
return savei(root, db)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RemoveInstalled adds m to the installed package database.
|
||||||
|
func RemoveInstalled(root string, m pm.Meta) error {
|
||||||
|
db, err := loadi(root)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "loading installed db")
|
||||||
|
}
|
||||||
|
delete(db, m.Name)
|
||||||
|
return savei(root, db)
|
||||||
|
}
|
||||||
|
|
||||||
// IsInstalled checks if m is in the installed package database.
|
// IsInstalled checks if m is in the installed package database.
|
||||||
func IsInstalled(root string, m pm.Meta) (bool, error) {
|
func IsInstalled(root string, m pm.Meta) (bool, error) {
|
||||||
db, err := loadi(root)
|
db, err := loadi(root)
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package pkg
|
package pkg
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"mcquay.me/pm"
|
||||||
"mcquay.me/pm/db"
|
"mcquay.me/pm/db"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -18,7 +20,42 @@ func Remove(root string, pkgs []string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "checking ability to remove")
|
return errors.Wrap(err, "checking ability to remove")
|
||||||
}
|
}
|
||||||
log.Printf("%+v", ms)
|
|
||||||
|
|
||||||
return errors.New("NYI")
|
for _, m := range ms {
|
||||||
|
if err := script(root, m, "pre-remove"); err != nil {
|
||||||
|
return errors.Wrap(err, "pre-remove")
|
||||||
|
}
|
||||||
|
|
||||||
|
mdir := filepath.Join(root, installed, string(m.Name))
|
||||||
|
bom := filepath.Join(mdir, "bom.sha256")
|
||||||
|
bf, err := os.Open(bom)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrapf(err, "%q: opening bom", m.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
cs, err := pm.ParseCS(bf)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrapf(err, "%q: parsing bom", m.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
for n := range cs {
|
||||||
|
if err := os.Remove(filepath.Join(root, n)); err != nil {
|
||||||
|
return errors.Wrapf(err, "pkg %q", m.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := script(root, m, "post-remove"); err != nil {
|
||||||
|
return errors.Wrap(err, "post-remove")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := db.RemoveInstalled(root, m); err != nil {
|
||||||
|
return errors.Wrapf(err, "removing %q", m.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.RemoveAll(mdir); err != nil {
|
||||||
|
return errors.Wrapf(err, "%q: removing pm install dir", m.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user