commit ac25659
chld
·
2026-02-07 08:01:08 +0000 UTC
parent 2600c7b
dependency resolving fucking works
2 files changed,
+61,
-14
M
main.go
M
main.go
+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+}