aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Zamarin <arthurzam@gentoo.org>2024-03-16 23:01:04 +0200
committerArthur Zamarin <arthurzam@gentoo.org>2024-03-16 23:01:04 +0200
commitd08bb9c14e36723e7347520b4444bf52c04c5eeb (patch)
tree5fc0478e8dca75966166427aa6e6bff29c968ed6
parentselfcheck: fix repo path (diff)
downloadsoko-d08bb9c14e36723e7347520b4444bf52c04c5eeb.tar.gz
soko-d08bb9c14e36723e7347520b4444bf52c04c5eeb.tar.bz2
soko-d08bb9c14e36723e7347520b4444bf52c04c5eeb.zip
app/package/useflags: show all local useflags
Resolves: https://github.com/gentoo/soko/issues/15 Signed-off-by: Arthur Zamarin <arthurzam@gentoo.org>
-rw-r--r--pkg/app/handler/packages/utils.go28
-rw-r--r--pkg/models/package.go15
2 files changed, 27 insertions, 16 deletions
diff --git a/pkg/app/handler/packages/utils.go b/pkg/app/handler/packages/utils.go
index 5a3af7d..423f937 100644
--- a/pkg/app/handler/packages/utils.go
+++ b/pkg/app/handler/packages/utils.go
@@ -138,33 +138,29 @@ func getParameterValue(parameterName string, r *http.Request) string {
// getPackageUseflags retrieves all local USE flags, global USE
// flags and use expands for a given package
-func getPackageUseflags(gpackage *models.Package) ([]models.Useflag, []models.Useflag, map[string][]models.Useflag) {
- var localUseflags, allGlobalUseflags, filteredGlobalUseflags []models.Useflag
- useExpands := make(map[string][]models.Useflag)
-
- if len(gpackage.Versions) == 0 {
- return localUseflags, allGlobalUseflags, useExpands
- }
-
- rawUseFlags := make([]string, len(gpackage.Versions[0].Useflags))
- for i, rawUseflag := range gpackage.Versions[0].Useflags {
- rawUseFlags[i] = strings.Replace(rawUseflag, "+", "", 1)
- }
-
+func getPackageUseflags(gpackage *models.Package) (localUseflags []models.Useflag, filteredGlobalUseflags []models.Useflag, useExpands map[string][]models.Useflag) {
+ rawUseFlags := gpackage.AllUseflags()
if len(rawUseFlags) == 0 {
- return localUseflags, allGlobalUseflags, useExpands
+ return
}
var tmp_useflags []models.Useflag
err := database.DBCon.Model(&tmp_useflags).
- Where("name in (?)", pg.In(rawUseFlags)).
+ WhereGroup(func(q *pg.Query) (*pg.Query, error) {
+ return q.Where("scope = ?", "local").Where("package = ?", gpackage.Atom), nil
+ }).
+ WhereOrGroup(func(q *pg.Query) (*pg.Query, error) {
+ return q.Where("scope != ?", "local").Where("name in (?)", pg.In(rawUseFlags)), nil
+ }).
Order("name ASC").
Select()
if err != nil && err != pg.ErrNoRows {
slog.Error("Failed fetching use flags", slog.Any("err", err))
- return localUseflags, allGlobalUseflags, useExpands
+ return
}
+ var allGlobalUseflags []models.Useflag
+ useExpands = make(map[string][]models.Useflag)
for _, useflag := range tmp_useflags {
if useflag.Scope == "global" {
allGlobalUseflags = append(allGlobalUseflags, useflag)
diff --git a/pkg/models/package.go b/pkg/models/package.go
index 22e1430..f543891 100644
--- a/pkg/models/package.go
+++ b/pkg/models/package.go
@@ -138,3 +138,18 @@ func (p Package) AllBugs() []*Bug {
return allBugsList
}
+
+func (p *Package) AllUseflags() []string {
+ useflags := make(map[string]struct{})
+ for _, version := range p.Versions {
+ for _, useflag := range version.Useflags {
+ useflags[strings.TrimPrefix(useflag, "+")] = struct{}{}
+ }
+ }
+
+ useflagsList := make([]string, 0, len(useflags))
+ for useflag := range useflags {
+ useflagsList = append(useflagsList, useflag)
+ }
+ return useflagsList
+}