From 2da233ad8be107de29190720f1c30199410fe0cd Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Mon, 5 Feb 2024 08:52:56 +0300 Subject: [PATCH] Propagate install_if and provider_priority to APKINDEX (#28899) Resolves https://github.com/go-gitea/gitea/issues/28704 Example of an entry in the generated `APKINDEX` file: ``` C:Q1xCO3H9LTTEbhKt9G1alSC87I56c= P:hello V:2.12-r1 A:x86_64 T:The GNU Hello program produces a familiar, friendly greeting U:https://www.gnu.org/software/hello/ L:GPL-3.0-or-later S:15403 I:36864 o:hello m: t:1705934118 D:so:libc.musl-x86_64.so.1 p:cmd:hello=2.12-r1 i:foobar=1.0 !baz k:42 ``` the `i:` and `k:` entries are new. --------- Co-authored-by: KN4CK3R --- modules/packages/alpine/metadata.go | 26 ++++++++++++++++---------- services/packages/alpine/repository.go | 6 ++++++ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/modules/packages/alpine/metadata.go b/modules/packages/alpine/metadata.go index c2d0caffa125..582c42610d20 100644 --- a/modules/packages/alpine/metadata.go +++ b/modules/packages/alpine/metadata.go @@ -55,16 +55,17 @@ type VersionMetadata struct { } type FileMetadata struct { - Checksum string `json:"checksum"` - Packager string `json:"packager,omitempty"` - BuildDate int64 `json:"build_date,omitempty"` - Size int64 `json:"size,omitempty"` - Architecture string `json:"architecture,omitempty"` - Origin string `json:"origin,omitempty"` - CommitHash string `json:"commit_hash,omitempty"` - InstallIf string `json:"install_if,omitempty"` - Provides []string `json:"provides,omitempty"` - Dependencies []string `json:"dependencies,omitempty"` + Checksum string `json:"checksum"` + Packager string `json:"packager,omitempty"` + BuildDate int64 `json:"build_date,omitempty"` + Size int64 `json:"size,omitempty"` + Architecture string `json:"architecture,omitempty"` + Origin string `json:"origin,omitempty"` + CommitHash string `json:"commit_hash,omitempty"` + InstallIf string `json:"install_if,omitempty"` + Provides []string `json:"provides,omitempty"` + Dependencies []string `json:"dependencies,omitempty"` + ProviderPriority int64 `json:"provider_priority,omitempty"` } // ParsePackage parses the Alpine package file @@ -188,6 +189,11 @@ func ParsePackageInfo(r io.Reader) (*Package, error) { if value != "" { p.FileMetadata.Dependencies = append(p.FileMetadata.Dependencies, value) } + case "provider_priority": + n, err := strconv.ParseInt(value, 10, 64) + if err == nil { + p.FileMetadata.ProviderPriority = n + } } } if err := scanner.Err(); err != nil { diff --git a/services/packages/alpine/repository.go b/services/packages/alpine/repository.go index 30b7a06eb36d..104548b42155 100644 --- a/services/packages/alpine/repository.go +++ b/services/packages/alpine/repository.go @@ -230,6 +230,12 @@ func buildPackagesIndex(ctx context.Context, ownerID int64, repoVersion *package if len(pd.FileMetadata.Provides) > 0 { fmt.Fprintf(&buf, "p:%s\n", strings.Join(pd.FileMetadata.Provides, " ")) } + if pd.FileMetadata.InstallIf != "" { + fmt.Fprintf(&buf, "i:%s\n", pd.FileMetadata.InstallIf) + } + if pd.FileMetadata.ProviderPriority > 0 { + fmt.Fprintf(&buf, "k:%d\n", pd.FileMetadata.ProviderPriority) + } fmt.Fprint(&buf, "\n") }