package packages import "net/http" import "strconv" import "soko/pkg/database" import "soko/pkg/models" import "soko/pkg/app/handler/categories" type eapiPackage struct { Category string Package string Version string Maintainers []*models.Maintainer ReverseDependencies uint64 Bugs uint64 IsMasked bool IsRedundant bool HasStable bool } templ eapiOverview(packages []eapiPackage) {

EAPI 6 Overview

for _, pkg := range packages { }
Version Rev-deps Bugs Maintainers
{ pkg.Category + "/" + pkg.Package }{ "-" + pkg.Version } if pkg.IsMasked { M } else if pkg.IsRedundant { R } else if pkg.HasStable { S } { strconv.FormatUint(pkg.ReverseDependencies, 10) } { strconv.FormatUint(pkg.Bugs, 10) } if len(pkg.Maintainers) > 0 { @maintainersList(pkg.Maintainers) } else { Maintainer-needed }
} func Eapi(w http.ResponseWriter, r *http.Request) { var result []eapiPackage err := database.DBCon.Model((*models.Version)(nil)). Column("version.category", "version.package", "version.version"). ColumnExpr("(?) AS maintainers", database.DBCon.Model((*models.Package)(nil)). Column("maintainers"). Where("atom = version.atom"). Limit(1)). Join("LEFT JOIN reverse_dependencies").JoinOn("version.atom = reverse_dependencies.atom"). ColumnExpr("COALESCE(COUNT(DISTINCT reverse_dependencies.reverse_dependency_atom),0) AS reverse_dependencies"). Join("LEFT JOIN package_to_bugs").JoinOn("version.atom = package_to_bugs.package_atom"). ColumnExpr("COALESCE(COUNT(DISTINCT package_to_bugs.id),0) AS bugs"). ColumnExpr("EXISTS(?) AS is_masked", database.DBCon.Model((*models.MaskToVersion)(nil)). ColumnExpr("1"). Where("version_id = version.id")). ColumnExpr("EXISTS(?) AS is_redundant", database.DBCon.Model((*models.PkgCheckResult)(nil)). ColumnExpr("1"). Where("cpv = version.id").Where("class = ?", "RedundantVersion")). ColumnExpr("EXISTS(?) AS has_stable", database.DBCon.Model((*models.PkgCheckResult)(nil)). ColumnExpr("1"). Where("atom = version.atom").Where("class = ?", "StableRequest")). Where("version.eapi = ?", "6"). Group("version.id"). Order("version.atom"). Select(&result) if err != nil { http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } categories.RenderPage(w, r, "EAPI 6 Overview", "EAPI", eapiOverview(result)) }