1package dgrb
2
3import (
4 "fmt"
5 "git.sr.ht/~chld/dgr/cmd"
6 "os"
7 "path/filepath"
8 "strings"
9)
10
11func Del(pkg string) {
12 dgr.Msg("removing package \033[33m", pkg, "\033[m")
13 f, err := os.ReadFile(filepath.Join(os.Getenv("DTR_DB"), pkg, "manifest"))
14 if err != nil {
15 dgr.Die("could not read manifest", filepath.Join(os.Getenv("DTR_DB"), pkg, "manifest"), 1)
16 }
17
18 l := strings.Fields(string(f))
19 var symlinks []string
20
21 for i := range len(l) {
22 fmt.Printf("\tdeleting %s\t", l[i])
23 path := strings.TrimSpace(strings.TrimSuffix(l[i], "/"))
24 if path == "" {
25 fmt.Printf("SKIP\n")
26 continue
27 }
28
29 info, err := os.Lstat(path)
30 if err != nil {
31 fmt.Printf("SKIP\n")
32 continue
33 }
34
35 if info.Mode()&os.ModeSymlink != 0 {
36 if st, err := os.Stat(path); err == nil && st.IsDir() {
37 symlinks = append(symlinks, path)
38 }
39 fmt.Printf("SKIP\n")
40 continue
41 }
42
43 err = os.Remove(path)
44 if err != nil {
45 fmt.Printf("\033[31mNO\033[m\n")
46 } else {
47 fmt.Printf("\033[32mOK\033[m\n")
48 }
49 }
50
51 for _, s := range symlinks {
52 if _, err := os.Stat(s); os.IsNotExist(err) {
53 _ = os.Remove(s)
54 }
55 }
56
57 // remove pkg entry in installed file
58 inst, err := os.ReadFile(filepath.Join(os.Getenv("DTR_DB"), "installed"))
59 if err != nil {
60 dgr.Die("error reading file", filepath.Join(os.Getenv("DTR_DB"), "installed"), 1)
61 }
62
63 ninst := strings.ReplaceAll(string(inst), pkg, "")
64
65 err = os.WriteFile(filepath.Join(os.Getenv("DTR_DB"), "installed"), []byte(ninst), 0755)
66 if err != nil {
67 dgr.Die("could not write to file", filepath.Join(os.Getenv("DTR_DB"), "installed"), 1)
68 } else {
69 dgr.Msg("removed entry \033[33m", pkg, "\033[m from installed file")
70 }
71
72 dgr.Msg("removed \033[1;31m", pkg, "\033[m successfully")
73}