aboutsummaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorKN4CK3R <admin@oldschoolhack.me>2024-01-19 12:37:10 +0100
committerGitHub <noreply@github.com>2024-01-19 11:37:10 +0000
commit461d8b53c2e51a8a6a1715ba40ac61d7e9f93971 (patch)
tree2bad0b2908f9f3e76d9a195c4fe1c66016b8bcbf /models
parent075c4c89ee28590bd4ab8f6cf7338d723c4696eb (diff)
downloadgitea-461d8b53c2e51a8a6a1715ba40ac61d7e9f93971.tar.gz
gitea-461d8b53c2e51a8a6a1715ba40ac61d7e9f93971.zip
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: ![grafik](https://github.com/go-gitea/gitea/assets/1666336/8f132760-882c-4ab8-9678-77e47dfc4415)
Diffstat (limited to 'models')
-rw-r--r--models/packages/package.go14
-rw-r--r--models/packages/package_blob.go12
-rw-r--r--models/packages/package_file.go26
-rw-r--r--models/packages/package_version.go12
-rw-r--r--models/packages/rpm/search.go23
5 files changed, 59 insertions, 28 deletions
diff --git a/models/packages/package.go b/models/packages/package.go
index 380a076f9d..65a2574150 100644
--- a/models/packages/package.go
+++ b/models/packages/package.go
@@ -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
diff --git a/models/packages/package_blob.go b/models/packages/package_blob.go
index d1f470d520..d9c30b6533 100644
--- a/models/packages/package_blob.go
+++ b/models/packages/package_blob.go
@@ -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
diff --git a/models/packages/package_file.go b/models/packages/package_file.go
index 1c2c9ac072..1bb6b57a34 100644
--- a/models/packages/package_file.go
+++ b/models/packages/package_file.go
@@ -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
}
diff --git a/models/packages/package_version.go b/models/packages/package_version.go
index 9999fc4dab..8fc475691b 100644
--- a/models/packages/package_version.go
+++ b/models/packages/package_version.go
@@ -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
diff --git a/models/packages/rpm/search.go b/models/packages/rpm/search.go
new file mode 100644
index 0000000000..e697421b49
--- /dev/null
+++ b/models/packages/rpm/search.go
@@ -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,
+ )
+}