diff options
author | KN4CK3R <admin@oldschoolhack.me> | 2023-05-05 22:33:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-05 20:33:37 +0000 |
commit | 05209f0d1d4b996b8beb6633880b8fe12c15932b (patch) | |
tree | d8409611a63809641f34dfdfe48b5a239f8e5029 /services/packages/packages.go | |
parent | 8f314c679309e5a64928ef70443ddddaae6a803a (diff) | |
download | gitea-05209f0d1d4b996b8beb6633880b8fe12c15932b.tar.gz gitea-05209f0d1d4b996b8beb6633880b8fe12c15932b.zip |
Add RPM registry (#23380)
Fixes #20751
This PR adds a RPM package registry. You can follow [this
tutorial](https://opensource.com/article/18/9/how-build-rpm-packages) to
build a *.rpm package for testing.
This functionality is similar to the Debian registry (#22854) and
therefore shares some methods. I marked this PR as blocked because it
should be merged after #22854.

Diffstat (limited to 'services/packages/packages.go')
-rw-r--r-- | services/packages/packages.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/services/packages/packages.go b/services/packages/packages.go index 735e52c854..535f2fac8e 100644 --- a/services/packages/packages.go +++ b/services/packages/packages.go @@ -379,6 +379,8 @@ func CheckSizeQuotaExceeded(ctx context.Context, doer, owner *user_model.User, p typeSpecificSize = setting.Packages.LimitSizePub case packages_model.TypePyPI: typeSpecificSize = setting.Packages.LimitSizePyPI + case packages_model.TypeRpm: + typeSpecificSize = setting.Packages.LimitSizeRpm case packages_model.TypeRubyGems: typeSpecificSize = setting.Packages.LimitSizeRubyGems case packages_model.TypeSwift: @@ -406,6 +408,46 @@ func CheckSizeQuotaExceeded(ctx context.Context, doer, owner *user_model.User, p return nil } +// GetOrCreateInternalPackageVersion gets or creates an internal package +// Some package types need such internal packages for housekeeping. +func GetOrCreateInternalPackageVersion(ownerID int64, packageType packages_model.Type, name, version string) (*packages_model.PackageVersion, error) { + var pv *packages_model.PackageVersion + + return pv, db.WithTx(db.DefaultContext, func(ctx context.Context) error { + p := &packages_model.Package{ + OwnerID: ownerID, + Type: packageType, + Name: name, + LowerName: name, + IsInternal: true, + } + var err error + if p, err = packages_model.TryInsertPackage(ctx, p); err != nil { + if err != packages_model.ErrDuplicatePackage { + log.Error("Error inserting package: %v", err) + return err + } + } + + pv = &packages_model.PackageVersion{ + PackageID: p.ID, + CreatorID: ownerID, + Version: version, + LowerVersion: version, + IsInternal: true, + MetadataJSON: "null", + } + if pv, err = packages_model.GetOrInsertVersion(ctx, pv); err != nil { + if err != packages_model.ErrDuplicatePackageVersion { + log.Error("Error inserting package version: %v", err) + return err + } + } + + return nil + }) +} + // RemovePackageVersionByNameAndVersion deletes a package version and all associated files func RemovePackageVersionByNameAndVersion(doer *user_model.User, pvi *PackageInfo) error { pv, err := packages_model.GetVersionByNameAndVersion(db.DefaultContext, pvi.Owner.ID, pvi.PackageType, pvi.Name, pvi.Version) |