commit ac25659

chld  ·  2026-02-07 08:01:08 +0000 UTC
parent 2600c7b
dependency resolving fucking works
2 files changed,  +61, -14
+16, -14
 1@@ -136,26 +136,28 @@ func main() {
 2 		}
 3 
 4 		dgre.VC("DTR_DIR")
 5-		for i := range len(pkgs) {
 6 
 7-			nf := dgrb.DepRes(pkgs[i])
 8-			fmt.Println(nf)
 9-			for n := range len(nf) {
10-				nf = append(nf, strings.Join(dgrb.DepRes(nf[n]), " "))
11-				fmt.Println(nf[n], nf)
12-				n++
13-				continue
14-			}
15+		for i := range pkgs {
16+			// get first level deps of pkg
17+			deps := dgrb.DepRes(pkgs[i])
18 
19-			for n := range len(nf) {
20-				dgrb.Build(nf[n], "make")
21-				dgrb.Inst(nf[n])
22-				n++
23-				continue
24+			for _, dep := range deps {
25+				// second level deps
26+				sd := dgrb.DepRes(dep)
27+				for n := range len(sd) {
28+					dgrb.Build(sd[n], "make")
29+					dgrb.Inst(sd[n])
30+				}
31+
32+				dgrb.Build(dep, "make")
33+				dgrb.Inst(dep)
34 			}
35 
36+			// finally build the package itself
37 			dgrb.Build(pkgs[i], "make")
38+			dgrb.Inst(pkgs[i])
39 		}
40+
41 	case "i":
42 		for i := range len(pkgs) {
43 			dgrb.Inst(pkgs[i])
+45, -0
 1@@ -0,0 +1,45 @@
 2+package dgrb
 3+
 4+import (
 5+	"git.sr.ht/~chld/dgr/cmd"
 6+	"os"
 7+	"path/filepath"
 8+	"strings"
 9+)
10+
11+func DepRes(pkg string) []string {
12+	x, b := dgr.FindPkg(pkg)
13+	if !b {
14+		dgr.Warn("could not find package", pkg)
15+		return nil
16+	}
17+
18+	file, _ := os.ReadFile(filepath.Join(x, "deps"))
19+	f := strings.Fields(string(file))
20+
21+	var bt, lt, rt []string
22+	for _, dep := range f {
23+		switch {
24+		case strings.HasPrefix(dep, "."):
25+			bt = append(bt, strings.TrimPrefix(dep, "."))
26+		case strings.HasPrefix(dep, "/"):
27+			lt = append(lt, strings.TrimPrefix(dep, "/"))
28+		case strings.HasPrefix(dep, ">"):
29+			rt = append(rt, strings.TrimPrefix(dep, ">"))
30+		}
31+	}
32+
33+	nf := append(bt, append(lt, rt...)...)
34+
35+	installed, _ := os.ReadFile(filepath.Join(os.Getenv("DTR_DB"), "installed"))
36+	inst := string(installed)
37+
38+	var out []string
39+	for _, dep := range nf {
40+		if !strings.Contains(inst, dep) {
41+			out = append(out, dep)
42+		}
43+	}
44+
45+	return out
46+}