From d06930382506e063d4ace5a78556bfd5668735cc Mon Sep 17 00:00:00 2001 From: Danila Fominykh Date: Wed, 2 Aug 2023 00:23:12 +0300 Subject: [PATCH] fixed pacman database creation algorithm, arch UI template --- modules/packages/arch/metadata.go | 2 +- services/packages/arch/db_manager.go | 69 +++++++++++++++++++--------- templates/package/content/arch.tmpl | 16 +++++-- 3 files changed, 60 insertions(+), 27 deletions(-) diff --git a/modules/packages/arch/metadata.go b/modules/packages/arch/metadata.go index 2806e69ce8..a51b8455b0 100644 --- a/modules/packages/arch/metadata.go +++ b/modules/packages/arch/metadata.go @@ -38,7 +38,7 @@ type Metadata struct { } // Package description file that will be saved as .desc file in object storage. -// Resulting file will be used to create pacman database. +// This file will be used to create pacman database. type DbDesc struct { Filename string `json:"filename"` Name string `json:"name"` diff --git a/services/packages/arch/db_manager.go b/services/packages/arch/db_manager.go index 6f75bb66ab..7eea161212 100644 --- a/services/packages/arch/db_manager.go +++ b/services/packages/arch/db_manager.go @@ -164,37 +164,64 @@ func CreatePacmanDb(ctx *context.Context, owner, architecture, distro string) ([ }) for _, version := range versions { - var md arch.Metadata - err = json.Unmarshal([]byte(version.MetadataJSON), &md) + desc, err := GetPacmanDbDesc(ctx, &DescParams{ + Version: version, + Arch: architecture, + Distro: distro, + }) if err != nil { return nil, err } - var found bool - for _, da := range md.DistroArch { - if da == distro+"-"+architecture || da == distro+"-any" { - desckey := pkg.Name + "-" + version.Version + "-" + architecture + ".desc" - descfile, err := GetFileObject(ctx, distro, desckey) - if err != nil { - return nil, err - } - descbytes, err := io.ReadAll(descfile) - if err != nil { - return nil, err - } - entries[pkg.Name+"-"+version.Version+"/desc"] = descbytes - found = true - break - } - } - if found { - break + if desc == nil { + continue } + entries[pkg.Name+"-"+version.Version+"/desc"] = desc + break } } return arch.CreatePacmanDb(entries) } +type DescParams struct { + Version *pkg_model.PackageVersion + Arch string + Distro string +} + +// Checks if desc file exists for required architecture or any and returns it +// in form of byte slice. +func GetPacmanDbDesc(ctx *context.Context, p *DescParams) ([]byte, error) { + var md arch.Metadata + err := json.Unmarshal([]byte(p.Version.MetadataJSON), &md) + if err != nil { + return nil, err + } + + for _, distroarch := range md.DistroArch { + var storagekey string + + if distroarch == p.Distro+"-"+p.Arch { + storagekey = md.Name + "-" + md.Version + "-" + p.Arch + ".desc" + } + if distroarch == p.Distro+"-any" { + storagekey = md.Name + "-" + md.Version + "-any.desc" + } + + if storagekey == "" { + continue + } + + descfile, err := GetFileObject(ctx, p.Distro, storagekey) + if err != nil { + return nil, err + } + + return io.ReadAll(descfile) + } + return nil, nil +} + // Remove specific package version related to provided user or organization. func RemovePackage(ctx *context.Context, u *user.User, name, version string) error { ver, err := pkg_model.GetVersionByNameAndVersion(ctx, u.ID, pkg_model.TypeArch, name, version) diff --git a/templates/package/content/arch.tmpl b/templates/package/content/arch.tmpl index e58ddd669a..8cbac89438 100644 --- a/templates/package/content/arch.tmpl +++ b/templates/package/content/arch.tmpl @@ -23,7 +23,7 @@ Server = {{.locale.Tr "packages.arch.properties"}}
- +
@@ -47,7 +47,7 @@ Server =
Optional depends
-
+ {{end}} @@ -57,22 +57,28 @@ Server = {{end}} - + {{if .PackageDescriptor.Metadata.CheckDepends}} {{end}} - + {{if .PackageDescriptor.Metadata.Backup}} {{end}} + + {{if .PackageDescriptor.Metadata.DistroArch}} + + + + + {{end}}
Description
{{StringUtils.Join $.PackageDescriptor.Metadata.OptDepends " "}}{{StringUtils.Join $.PackageDescriptor.Metadata.OptDepends ", "}}
Check depends
{{StringUtils.Join $.PackageDescriptor.Metadata.CheckDepends " "}}
Backup file
{{StringUtils.Join $.PackageDescriptor.Metadata.Backup " "}}
Available for
{{StringUtils.Join $.PackageDescriptor.Metadata.DistroArch ", "}}
- {{end}}