commit d3bea7b
chld
·
2026-02-07 19:09:25 +0000 UTC
parent bb56196
add len checking in cases
2 files changed,
+82,
-0
M
main.go
M
main.go
+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+}