commit d3bea7b

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