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:
commit
cbfb87b329
3 changed files with 41 additions and 4 deletions
|
@ -173,6 +173,12 @@ func PushPackage(ctx *context.Context) {
|
||||||
apiError(ctx, http.StatusInternalServerError, err)
|
apiError(ctx, http.StatusInternalServerError, err)
|
||||||
return
|
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)
|
ctx.Status(http.StatusCreated)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,8 +203,7 @@ func GetPackageOrDB(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if archDBOrSig.MatchString(file) {
|
if archDBOrSig.MatchString(file) {
|
||||||
pkg, u, pf, err := arch_service.GetPackageDBFile(ctx, group, arch, ctx.Package.Owner.ID,
|
pkg, u, pf, err := arch_service.GetPackageDBFile(ctx, ctx.Package.Owner.ID, group, arch, strings.HasSuffix(file, ".sig"))
|
||||||
strings.HasSuffix(file, ".sig"))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, util.ErrNotExist) {
|
if errors.Is(err, util.ErrNotExist) {
|
||||||
apiError(ctx, http.StatusNotFound, err)
|
apiError(ctx, http.StatusNotFound, err)
|
||||||
|
|
|
@ -273,16 +273,24 @@ func GetPackageFile(ctx context.Context, group, file string, ownerID int64) (io.
|
||||||
return packages_service.GetPackageFileStream(ctx, pkgFile)
|
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)
|
pv, err := GetOrCreateRepositoryVersion(ctx, ownerID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
fileName := fmt.Sprintf("%s.db", arch)
|
fileName := fmt.Sprintf("%s.db", arch)
|
||||||
if signFile {
|
if sigFile {
|
||||||
fileName = fmt.Sprintf("%s.db.sig", arch)
|
fileName = fmt.Sprintf("%s.db.sig", arch)
|
||||||
}
|
}
|
||||||
file, err := packages_model.GetFileForVersionByName(ctx, pv.ID, fileName, group)
|
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 {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -336,6 +336,30 @@ HMhNSS1IzUsBcpJAPFAwwUXSM0u4BjoaR8EoGAWjgGQAAILFeyQADAAA
|
||||||
MakeRequest(t, req, http.StatusNoContent)
|
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 {
|
func getProperty(data, key string) string {
|
||||||
|
|
Loading…
Reference in a new issue