diff options
author | Arthur Zamarin <arthurzam@gentoo.org> | 2024-03-16 23:01:04 +0200 |
---|---|---|
committer | Arthur Zamarin <arthurzam@gentoo.org> | 2024-03-16 23:01:04 +0200 |
commit | d08bb9c14e36723e7347520b4444bf52c04c5eeb (patch) | |
tree | 5fc0478e8dca75966166427aa6e6bff29c968ed6 | |
parent | selfcheck: fix repo path (diff) | |
download | soko-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.go | 28 | ||||
-rw-r--r-- | pkg/models/package.go | 15 |
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 +} |