From 3663a8ef8fc1d0dc1c6a895b71733c653b4848e4 Mon Sep 17 00:00:00 2001 From: Arsen Musayelyan Date: Wed, 30 Nov 2022 18:26:25 -0800 Subject: [PATCH] Add FindPkgs to repos package --- internal/repos/find.go | 61 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 internal/repos/find.go diff --git a/internal/repos/find.go b/internal/repos/find.go new file mode 100644 index 0000000..7a52aaa --- /dev/null +++ b/internal/repos/find.go @@ -0,0 +1,61 @@ +package repos + +import ( + "github.com/genjidb/genji" + "github.com/genjidb/genji/document" + "github.com/genjidb/genji/types" + "go.arsenm.dev/lure/internal/db" +) + +func FindPkgs(gdb *genji.DB, pkgs []string) (map[string][]db.Package, error) { + found := map[string][]db.Package{} + + for _, pkgName := range pkgs { + result, err := db.GetPkgs(gdb, "name LIKE ?", pkgName) + if err != nil { + return nil, err + } + + added := 0 + err = result.Iterate(func(d types.Document) error { + var pkg db.Package + err = document.StructScan(d, &pkg) + if err != nil { + return err + } + + added++ + found[pkgName] = append(found[pkgName], pkg) + return nil + }) + result.Close() + if err != nil { + return nil, err + } + + if added == 0 { + result, err := db.GetPkgs(gdb, "? IN provides", pkgName) + if err != nil { + return nil, err + } + + err = result.Iterate(func(d types.Document) error { + var pkg db.Package + err = document.StructScan(d, &pkg) + if err != nil { + return err + } + + added++ + found[pkgName] = append(found[pkgName], pkg) + return nil + }) + result.Close() + if err != nil { + return nil, err + } + } + } + + return found, nil +}