feat: allow finding packages by "{repo}/{pkg}" and "{pkg}+alr-{repo}"

This commit is contained in:
2025-07-06 16:47:46 +03:00
parent 67a6cb31de
commit 4899e203bb
6 changed files with 124 additions and 53 deletions

View File

@ -21,44 +21,58 @@ package repos
import (
"context"
"fmt"
"strings"
"gitea.plemya-x.ru/Plemya-x/ALR/pkg/alrsh"
)
func (rs *Repos) FindPkgs(ctx context.Context, pkgs []string) (map[string][]alrsh.Package, []string, error) {
found := map[string][]alrsh.Package{}
notFound := []string(nil)
found := make(map[string][]alrsh.Package)
var notFound []string
for _, pkgName := range pkgs {
if pkgName == "" {
continue
}
result, err := rs.db.GetPkgs(ctx, "json_array_contains(provides, ?)", pkgName)
if err != nil {
return nil, nil, err
}
var result []alrsh.Package
var err error
added := 0
for _, pkg := range result {
added++
found[pkgName] = append(found[pkgName], pkg)
}
switch {
case strings.Contains(pkgName, "/"):
// repo/pkg
parts := strings.SplitN(pkgName, "/", 2)
repo := parts[0]
name := parts[1]
result, err = rs.db.GetPkgs(ctx, "name = ? AND repository = ?", name, repo)
if added == 0 {
result, err := rs.db.GetPkgs(ctx, "name LIKE ?", pkgName)
case strings.Contains(pkgName, "+alr-"):
// pkg+alr-repo
parts := strings.SplitN(pkgName, "+alr-", 2)
name := parts[0]
repo := parts[1]
result, err = rs.db.GetPkgs(ctx, "name = ? AND repository = ?", name, repo)
default:
result, err = rs.db.GetPkgs(ctx, "json_array_contains(provides, ?)", pkgName)
if err != nil {
return nil, nil, err
return nil, nil, fmt.Errorf("FindPkgs: get by provides: %w", err)
}
for _, pkg := range result {
added++
found[pkgName] = append(found[pkgName], pkg)
if len(result) == 0 {
result, err = rs.db.GetPkgs(ctx, "name LIKE ?", pkgName)
}
}
if added == 0 {
if err != nil {
return nil, nil, fmt.Errorf("FindPkgs: lookup for %q failed: %w", pkgName, err)
}
if len(result) == 0 {
notFound = append(notFound, pkgName)
} else {
found[pkgName] = result
}
}