Merge pull request 'package arch database not updating when uploading "any" architecture' (#5634) from dragon/forgejo:bugfix-arch-noarch into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/5634
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
This commit is contained in:
Earl Warren 2024-10-21 05:09:13 +00:00
commit cbfb87b329
3 changed files with 41 additions and 4 deletions

View file

@ -173,6 +173,12 @@ func PushPackage(ctx *context.Context) {
apiError(ctx, http.StatusInternalServerError, err)
return
}
if p.FileMetadata.Arch == "any" {
if err = arch_service.BuildCustomRepositoryFiles(ctx, ctx.Package.Owner.ID, group); err != nil {
apiError(ctx, http.StatusInternalServerError, err)
return
}
}
ctx.Status(http.StatusCreated)
}
@ -197,8 +203,7 @@ func GetPackageOrDB(ctx *context.Context) {
}
if archDBOrSig.MatchString(file) {
pkg, u, pf, err := arch_service.GetPackageDBFile(ctx, group, arch, ctx.Package.Owner.ID,
strings.HasSuffix(file, ".sig"))
pkg, u, pf, err := arch_service.GetPackageDBFile(ctx, ctx.Package.Owner.ID, group, arch, strings.HasSuffix(file, ".sig"))
if err != nil {
if errors.Is(err, util.ErrNotExist) {
apiError(ctx, http.StatusNotFound, err)

View file

@ -273,16 +273,24 @@ func GetPackageFile(ctx context.Context, group, file string, ownerID int64) (io.
return packages_service.GetPackageFileStream(ctx, pkgFile)
}
func GetPackageDBFile(ctx context.Context, group, arch string, ownerID int64, signFile bool) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) {
func GetPackageDBFile(ctx context.Context, ownerID int64, group, arch string, sigFile bool) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) {
pv, err := GetOrCreateRepositoryVersion(ctx, ownerID)
if err != nil {
return nil, nil, nil, err
}
fileName := fmt.Sprintf("%s.db", arch)
if signFile {
if sigFile {
fileName = fmt.Sprintf("%s.db.sig", arch)
}
file, err := packages_model.GetFileForVersionByName(ctx, pv.ID, fileName, group)
// fail back to any db
if errors.Is(err, util.ErrNotExist) && arch != "any" {
fileName = "any.db"
if sigFile {
fileName = "any.db.sig"
}
file, err = packages_model.GetFileForVersionByName(ctx, pv.ID, fileName, group)
}
if err != nil {
return nil, nil, nil, err
}

View file

@ -336,6 +336,30 @@ HMhNSS1IzUsBcpJAPFAwwUXSM0u4BjoaR8EoGAWjgGQAAILFeyQADAAA
MakeRequest(t, req, http.StatusNoContent)
}
})
t.Run("Package Arch Test", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequestWithBody(t, "PUT", rootURL, bytes.NewReader(pkgs["any"])).
AddBasicAuth(user.Name)
MakeRequest(t, req, http.StatusCreated)
req = NewRequest(t, "GET", rootURL+"/x86_64/base.db")
respPkg := MakeRequest(t, req, http.StatusOK)
files, err := listTarGzFiles(respPkg.Body.Bytes())
require.NoError(t, err)
require.Len(t, files, 1)
req = NewRequestWithBody(t, "PUT", rootURL, bytes.NewReader(pkgs["otherXZ"])).
AddBasicAuth(user.Name)
MakeRequest(t, req, http.StatusCreated)
req = NewRequest(t, "GET", rootURL+"/x86_64/base.db")
respPkg = MakeRequest(t, req, http.StatusOK)
files, err = listTarGzFiles(respPkg.Body.Bytes())
require.NoError(t, err)
require.Len(t, files, 2)
})
}
func getProperty(data, key string) string {