feat: allow finding packages by "{repo}/{pkg}" and "{pkg}+alr-{repo}"
This commit is contained in:
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9,52 +9,52 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: build.go:42
|
||||
#: build.go:41
|
||||
msgid "Build a local package"
|
||||
msgstr ""
|
||||
|
||||
#: build.go:48
|
||||
#: build.go:47
|
||||
msgid "Path to the build script"
|
||||
msgstr ""
|
||||
|
||||
#: build.go:53
|
||||
#: build.go:52
|
||||
msgid "Specify subpackage in script (for multi package script only)"
|
||||
msgstr ""
|
||||
|
||||
#: build.go:58
|
||||
#: build.go:57
|
||||
msgid "Name of the package to build and its repo (example: default/go-bin)"
|
||||
msgstr ""
|
||||
|
||||
#: build.go:63
|
||||
#: build.go:62
|
||||
msgid ""
|
||||
"Build package from scratch even if there's an already built package available"
|
||||
msgstr ""
|
||||
|
||||
#: build.go:73
|
||||
#: build.go:72
|
||||
msgid "Error getting working directory"
|
||||
msgstr ""
|
||||
|
||||
#: build.go:118
|
||||
#: build.go:117
|
||||
msgid "Cannot get absolute script path"
|
||||
msgstr ""
|
||||
|
||||
#: build.go:152
|
||||
#: build.go:143
|
||||
msgid "Package not found"
|
||||
msgstr ""
|
||||
|
||||
#: build.go:165
|
||||
#: build.go:156
|
||||
msgid "Nothing to build"
|
||||
msgstr ""
|
||||
|
||||
#: build.go:222
|
||||
#: build.go:213
|
||||
msgid "Error building package"
|
||||
msgstr ""
|
||||
|
||||
#: build.go:229
|
||||
#: build.go:220
|
||||
msgid "Error moving the package"
|
||||
msgstr ""
|
||||
|
||||
#: build.go:233
|
||||
#: build.go:224
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
|
@ -16,52 +16,52 @@ msgstr ""
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Gtranslator 48.0\n"
|
||||
|
||||
#: build.go:42
|
||||
#: build.go:41
|
||||
msgid "Build a local package"
|
||||
msgstr "Сборка локального пакета"
|
||||
|
||||
#: build.go:48
|
||||
#: build.go:47
|
||||
msgid "Path to the build script"
|
||||
msgstr "Путь к скрипту сборки"
|
||||
|
||||
#: build.go:53
|
||||
#: build.go:52
|
||||
msgid "Specify subpackage in script (for multi package script only)"
|
||||
msgstr "Укажите подпакет в скрипте (только для многопакетного скрипта)"
|
||||
|
||||
#: build.go:58
|
||||
#: build.go:57
|
||||
msgid "Name of the package to build and its repo (example: default/go-bin)"
|
||||
msgstr "Имя пакета для сборки и его репозиторий (пример: default/go-bin)"
|
||||
|
||||
#: build.go:63
|
||||
#: build.go:62
|
||||
msgid ""
|
||||
"Build package from scratch even if there's an already built package available"
|
||||
msgstr "Создайте пакет с нуля, даже если уже имеется готовый пакет"
|
||||
|
||||
#: build.go:73
|
||||
#: build.go:72
|
||||
msgid "Error getting working directory"
|
||||
msgstr "Ошибка при получении рабочего каталога"
|
||||
|
||||
#: build.go:118
|
||||
#: build.go:117
|
||||
msgid "Cannot get absolute script path"
|
||||
msgstr "Невозможно получить абсолютный путь к скрипту"
|
||||
|
||||
#: build.go:152
|
||||
#: build.go:143
|
||||
msgid "Package not found"
|
||||
msgstr "Пакет не найден"
|
||||
|
||||
#: build.go:165
|
||||
#: build.go:156
|
||||
msgid "Nothing to build"
|
||||
msgstr "Нечего собирать"
|
||||
|
||||
#: build.go:222
|
||||
#: build.go:213
|
||||
msgid "Error building package"
|
||||
msgstr "Ошибка при сборке пакета"
|
||||
|
||||
#: build.go:229
|
||||
#: build.go:220
|
||||
msgid "Error moving the package"
|
||||
msgstr "Ошибка при перемещении пакета"
|
||||
|
||||
#: build.go:233
|
||||
#: build.go:224
|
||||
msgid "Done"
|
||||
msgstr "Сделано"
|
||||
|
||||
|
Reference in New Issue
Block a user