mirror of
https://github.com/go-gitea/gitea
synced 2025-07-22 18:28:37 +00:00
Fix some RPM registry flaws (#28782)
Related #26984 (https://github.com/go-gitea/gitea/pull/26984#issuecomment-1889588912) Fix admin cleanup message. Fix models `Get` not respecting default values. Rebuild RPM repository files after cleanup. Do not add RPM group to package version name. Force stable sorting of Alpine/Debian/RPM repository data. Fix missing deferred `Close`. Add tests for multiple RPM groups. Removed non-cached `ReplaceAllStringRegex`. If there are multiple groups available, it's stated in the package installation screen: 
This commit is contained in:
@@ -191,18 +191,18 @@ type Package struct {
|
||||
func TryInsertPackage(ctx context.Context, p *Package) (*Package, error) {
|
||||
e := db.GetEngine(ctx)
|
||||
|
||||
key := &Package{
|
||||
OwnerID: p.OwnerID,
|
||||
Type: p.Type,
|
||||
LowerName: p.LowerName,
|
||||
}
|
||||
existing := &Package{}
|
||||
|
||||
has, err := e.Get(key)
|
||||
has, err := e.Where(builder.Eq{
|
||||
"owner_id": p.OwnerID,
|
||||
"type": p.Type,
|
||||
"lower_name": p.LowerName,
|
||||
}).Get(existing)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if has {
|
||||
return key, ErrDuplicatePackage
|
||||
return existing, ErrDuplicatePackage
|
||||
}
|
||||
if _, err = e.Insert(p); err != nil {
|
||||
return nil, err
|
||||
|
@@ -41,12 +41,20 @@ type PackageBlob struct {
|
||||
func GetOrInsertBlob(ctx context.Context, pb *PackageBlob) (*PackageBlob, bool, error) {
|
||||
e := db.GetEngine(ctx)
|
||||
|
||||
has, err := e.Get(pb)
|
||||
existing := &PackageBlob{}
|
||||
|
||||
has, err := e.Where(builder.Eq{
|
||||
"size": pb.Size,
|
||||
"hash_md5": pb.HashMD5,
|
||||
"hash_sha1": pb.HashSHA1,
|
||||
"hash_sha256": pb.HashSHA256,
|
||||
"hash_sha512": pb.HashSHA512,
|
||||
}).Get(existing)
|
||||
if err != nil {
|
||||
return nil, false, err
|
||||
}
|
||||
if has {
|
||||
return pb, true, nil
|
||||
return existing, true, nil
|
||||
}
|
||||
if _, err = e.Insert(pb); err != nil {
|
||||
return nil, false, err
|
||||
|
@@ -46,18 +46,18 @@ type PackageFile struct {
|
||||
func TryInsertFile(ctx context.Context, pf *PackageFile) (*PackageFile, error) {
|
||||
e := db.GetEngine(ctx)
|
||||
|
||||
key := &PackageFile{
|
||||
VersionID: pf.VersionID,
|
||||
LowerName: pf.LowerName,
|
||||
CompositeKey: pf.CompositeKey,
|
||||
}
|
||||
existing := &PackageFile{}
|
||||
|
||||
has, err := e.Get(key)
|
||||
has, err := e.Where(builder.Eq{
|
||||
"version_id": pf.VersionID,
|
||||
"lower_name": pf.LowerName,
|
||||
"composite_key": pf.CompositeKey,
|
||||
}).Get(existing)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if has {
|
||||
return pf, ErrDuplicatePackageFile
|
||||
return existing, ErrDuplicatePackageFile
|
||||
}
|
||||
if _, err = e.Insert(pf); err != nil {
|
||||
return nil, err
|
||||
@@ -93,13 +93,13 @@ func GetFileForVersionByName(ctx context.Context, versionID int64, name, key str
|
||||
return nil, ErrPackageFileNotExist
|
||||
}
|
||||
|
||||
pf := &PackageFile{
|
||||
VersionID: versionID,
|
||||
LowerName: strings.ToLower(name),
|
||||
CompositeKey: key,
|
||||
}
|
||||
pf := &PackageFile{}
|
||||
|
||||
has, err := db.GetEngine(ctx).Get(pf)
|
||||
has, err := db.GetEngine(ctx).Where(builder.Eq{
|
||||
"version_id": versionID,
|
||||
"lower_name": strings.ToLower(name),
|
||||
"composite_key": key,
|
||||
}).Get(pf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@@ -39,17 +39,17 @@ type PackageVersion struct {
|
||||
func GetOrInsertVersion(ctx context.Context, pv *PackageVersion) (*PackageVersion, error) {
|
||||
e := db.GetEngine(ctx)
|
||||
|
||||
key := &PackageVersion{
|
||||
PackageID: pv.PackageID,
|
||||
LowerVersion: pv.LowerVersion,
|
||||
}
|
||||
existing := &PackageVersion{}
|
||||
|
||||
has, err := e.Get(key)
|
||||
has, err := e.Where(builder.Eq{
|
||||
"package_id": pv.PackageID,
|
||||
"lower_version": pv.LowerVersion,
|
||||
}).Get(existing)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if has {
|
||||
return key, ErrDuplicatePackageVersion
|
||||
return existing, ErrDuplicatePackageVersion
|
||||
}
|
||||
if _, err = e.Insert(pv); err != nil {
|
||||
return nil, err
|
||||
|
23
models/packages/rpm/search.go
Normal file
23
models/packages/rpm/search.go
Normal file
@@ -0,0 +1,23 @@
|
||||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package rpm
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
packages_model "code.gitea.io/gitea/models/packages"
|
||||
rpm_module "code.gitea.io/gitea/modules/packages/rpm"
|
||||
)
|
||||
|
||||
// GetGroups gets all available groups
|
||||
func GetGroups(ctx context.Context, ownerID int64) ([]string, error) {
|
||||
return packages_model.GetDistinctPropertyValues(
|
||||
ctx,
|
||||
packages_model.TypeRpm,
|
||||
ownerID,
|
||||
packages_model.PropertyTypeFile,
|
||||
rpm_module.PropertyGroup,
|
||||
nil,
|
||||
)
|
||||
}
|
Reference in New Issue
Block a user