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 <admin@oldschoolhack.me>
This commit is contained in:
Sergey Bugaev 2024-02-05 08:52:56 +03:00 committed by GitHub
parent 016c77a833
commit 2da233ad8b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 10 deletions

View File

@ -65,6 +65,7 @@ type FileMetadata struct {
InstallIf string `json:"install_if,omitempty"` InstallIf string `json:"install_if,omitempty"`
Provides []string `json:"provides,omitempty"` Provides []string `json:"provides,omitempty"`
Dependencies []string `json:"dependencies,omitempty"` Dependencies []string `json:"dependencies,omitempty"`
ProviderPriority int64 `json:"provider_priority,omitempty"`
} }
// ParsePackage parses the Alpine package file // ParsePackage parses the Alpine package file
@ -188,6 +189,11 @@ func ParsePackageInfo(r io.Reader) (*Package, error) {
if value != "" { if value != "" {
p.FileMetadata.Dependencies = append(p.FileMetadata.Dependencies, 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 { if err := scanner.Err(); err != nil {

View File

@ -230,6 +230,12 @@ func buildPackagesIndex(ctx context.Context, ownerID int64, repoVersion *package
if len(pd.FileMetadata.Provides) > 0 { if len(pd.FileMetadata.Provides) > 0 {
fmt.Fprintf(&buf, "p:%s\n", strings.Join(pd.FileMetadata.Provides, " ")) 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") fmt.Fprint(&buf, "\n")
} }