loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

+41 -4
+7 -2
routers/api/packages/arch/arch.go
··· 173 173 apiError(ctx, http.StatusInternalServerError, err) 174 174 return 175 175 } 176 + if p.FileMetadata.Arch == "any" { 177 + if err = arch_service.BuildCustomRepositoryFiles(ctx, ctx.Package.Owner.ID, group); err != nil { 178 + apiError(ctx, http.StatusInternalServerError, err) 179 + return 180 + } 181 + } 176 182 ctx.Status(http.StatusCreated) 177 183 } 178 184 ··· 197 203 } 198 204 199 205 if archDBOrSig.MatchString(file) { 200 - pkg, u, pf, err := arch_service.GetPackageDBFile(ctx, group, arch, ctx.Package.Owner.ID, 201 - strings.HasSuffix(file, ".sig")) 206 + pkg, u, pf, err := arch_service.GetPackageDBFile(ctx, ctx.Package.Owner.ID, group, arch, strings.HasSuffix(file, ".sig")) 202 207 if err != nil { 203 208 if errors.Is(err, util.ErrNotExist) { 204 209 apiError(ctx, http.StatusNotFound, err)
+10 -2
services/packages/arch/repository.go
··· 273 273 return packages_service.GetPackageFileStream(ctx, pkgFile) 274 274 } 275 275 276 - func GetPackageDBFile(ctx context.Context, group, arch string, ownerID int64, signFile bool) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) { 276 + func GetPackageDBFile(ctx context.Context, ownerID int64, group, arch string, sigFile bool) (io.ReadSeekCloser, *url.URL, *packages_model.PackageFile, error) { 277 277 pv, err := GetOrCreateRepositoryVersion(ctx, ownerID) 278 278 if err != nil { 279 279 return nil, nil, nil, err 280 280 } 281 281 fileName := fmt.Sprintf("%s.db", arch) 282 - if signFile { 282 + if sigFile { 283 283 fileName = fmt.Sprintf("%s.db.sig", arch) 284 284 } 285 285 file, err := packages_model.GetFileForVersionByName(ctx, pv.ID, fileName, group) 286 + // fail back to any db 287 + if errors.Is(err, util.ErrNotExist) && arch != "any" { 288 + fileName = "any.db" 289 + if sigFile { 290 + fileName = "any.db.sig" 291 + } 292 + file, err = packages_model.GetFileForVersionByName(ctx, pv.ID, fileName, group) 293 + } 286 294 if err != nil { 287 295 return nil, nil, nil, err 288 296 }
+24
tests/integration/api_packages_arch_test.go
··· 336 336 MakeRequest(t, req, http.StatusNoContent) 337 337 } 338 338 }) 339 + t.Run("Package Arch Test", func(t *testing.T) { 340 + defer tests.PrintCurrentTest(t)() 341 + req := NewRequestWithBody(t, "PUT", rootURL, bytes.NewReader(pkgs["any"])). 342 + AddBasicAuth(user.Name) 343 + MakeRequest(t, req, http.StatusCreated) 344 + 345 + req = NewRequest(t, "GET", rootURL+"/x86_64/base.db") 346 + respPkg := MakeRequest(t, req, http.StatusOK) 347 + 348 + files, err := listTarGzFiles(respPkg.Body.Bytes()) 349 + require.NoError(t, err) 350 + require.Len(t, files, 1) 351 + 352 + req = NewRequestWithBody(t, "PUT", rootURL, bytes.NewReader(pkgs["otherXZ"])). 353 + AddBasicAuth(user.Name) 354 + MakeRequest(t, req, http.StatusCreated) 355 + 356 + req = NewRequest(t, "GET", rootURL+"/x86_64/base.db") 357 + respPkg = MakeRequest(t, req, http.StatusOK) 358 + 359 + files, err = listTarGzFiles(respPkg.Body.Bytes()) 360 + require.NoError(t, err) 361 + require.Len(t, files, 2) 362 + }) 339 363 } 340 364 341 365 func getProperty(data, key string) string {