@@ -23,6 +23,7 @@ import (
2323 "code.gitea.io/gitea/modules/json"
2424 packages_module "code.gitea.io/gitea/modules/packages"
2525 arch_module "code.gitea.io/gitea/modules/packages/arch"
26+ "code.gitea.io/gitea/modules/setting"
2627 "code.gitea.io/gitea/modules/util"
2728 packages_service "code.gitea.io/gitea/services/packages"
2829
@@ -235,6 +236,30 @@ func buildPackagesIndex(ctx context.Context, ownerID int64, repoVersion *package
235236 return packages_service .DeletePackageFile (ctx , pf )
236237 }
237238
239+ vpfs := make (map [string ]* entryOptions )
240+ for _ , pf := range pfs {
241+ current := & entryOptions {
242+ File : pf ,
243+ }
244+ current .Version , err = packages_model .GetVersionByID (ctx , pf .VersionID )
245+ if err != nil {
246+ return err
247+ }
248+
249+ if setting .Packages .DefaultMetaArchLatestVersion {
250+ old := vpfs [pf .Name ]
251+ if old != nil {
252+ if compareVersions (old .Version .Version , current .Version .Version ) == - 1 {
253+ vpfs [pf .Name ] = current
254+ }
255+ } else {
256+ vpfs [pf .Name ] = current
257+ }
258+ } else {
259+ vpfs [pf .Name ] = current
260+ }
261+ }
262+
238263 indexContent , _ := packages_module .NewHashedBuffer ()
239264 defer indexContent .Close ()
240265
@@ -243,15 +268,7 @@ func buildPackagesIndex(ctx context.Context, ownerID int64, repoVersion *package
243268
244269 cache := make (map [int64 ]* packages_model.Package )
245270
246- for _ , pf := range pfs {
247- opts := & entryOptions {
248- File : pf ,
249- }
250-
251- opts .Version , err = packages_model .GetVersionByID (ctx , pf .VersionID )
252- if err != nil {
253- return err
254- }
271+ for _ , opts := range vpfs {
255272 if err := json .Unmarshal ([]byte (opts .Version .MetadataJSON ), & opts .VersionMetadata ); err != nil {
256273 return err
257274 }
@@ -263,12 +280,12 @@ func buildPackagesIndex(ctx context.Context, ownerID int64, repoVersion *package
263280 }
264281 cache [opts .Package .ID ] = opts .Package
265282 }
266- opts .Blob , err = packages_model .GetBlobByID (ctx , pf .BlobID )
283+ opts .Blob , err = packages_model .GetBlobByID (ctx , opts . File .BlobID )
267284 if err != nil {
268285 return err
269286 }
270287
271- sig , err := packages_model .GetPropertiesByName (ctx , packages_model .PropertyTypeFile , pf .ID , arch_module .PropertySignature )
288+ sig , err := packages_model .GetPropertiesByName (ctx , packages_model .PropertyTypeFile , opts . File .ID , arch_module .PropertySignature )
272289 if err != nil {
273290 return err
274291 }
@@ -277,7 +294,7 @@ func buildPackagesIndex(ctx context.Context, ownerID int64, repoVersion *package
277294 }
278295 opts .Signature = sig [0 ].Value
279296
280- meta , err := packages_model .GetPropertiesByName (ctx , packages_model .PropertyTypeFile , pf .ID , arch_module .PropertyMetadata )
297+ meta , err := packages_model .GetPropertiesByName (ctx , packages_model .PropertyTypeFile , opts . File .ID , arch_module .PropertyMetadata )
281298 if err != nil {
282299 return err
283300 }
0 commit comments