aboutsummaryrefslogtreecommitdiffstats
path: root/models/packages
diff options
context:
space:
mode:
authorKN4CK3R <admin@oldschoolhack.me>2024-12-05 00:09:07 +0100
committerGitHub <noreply@github.com>2024-12-04 23:09:07 +0000
commit0c3c041c88afc66a5048c1d8cf1b29c8bbbb798f (patch)
tree57b7605040ce7b707f32e45bae443e068c90f664 /models/packages
parent5ab7aa700f4cafcb33d8ad77708d7419ad2480fa (diff)
downloadgitea-0c3c041c88afc66a5048c1d8cf1b29c8bbbb798f.tar.gz
gitea-0c3c041c88afc66a5048c1d8cf1b29c8bbbb798f.zip
Add Arch package registry (#32692)
Close #25037 Close #31037 This PR adds a Arch package registry usable with pacman. ![grafik](https://github.com/user-attachments/assets/81cdb0c2-02f9-4733-bee2-e48af6b45224) Rewrite of #25396 and #31037. You can follow [this tutorial](https://wiki.archlinux.org/title/Creating_packages) to build a package for testing. Docs PR: https://gitea.com/gitea/docs/pulls/111 Co-authored-by: [d1nch8g@ion.lc](mailto:d1nch8g@ion.lc) Co-authored-by: @ExplodingDragon --------- Co-authored-by: dancheg97 <dancheg97@fmnx.su> Co-authored-by: dragon <ExplodingFKL@gmail.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'models/packages')
-rw-r--r--models/packages/arch/search.go38
-rw-r--r--models/packages/descriptor.go3
-rw-r--r--models/packages/package.go6
-rw-r--r--models/packages/package_file.go5
4 files changed, 52 insertions, 0 deletions
diff --git a/models/packages/arch/search.go b/models/packages/arch/search.go
new file mode 100644
index 0000000000..f35c037b23
--- /dev/null
+++ b/models/packages/arch/search.go
@@ -0,0 +1,38 @@
+// Copyright 2024 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package arch
+
+import (
+ "context"
+
+ packages_model "code.gitea.io/gitea/models/packages"
+ arch_module "code.gitea.io/gitea/modules/packages/arch"
+)
+
+// GetRepositories gets all available repositories
+func GetRepositories(ctx context.Context, ownerID int64) ([]string, error) {
+ return packages_model.GetDistinctPropertyValues(
+ ctx,
+ packages_model.TypeArch,
+ ownerID,
+ packages_model.PropertyTypeFile,
+ arch_module.PropertyRepository,
+ nil,
+ )
+}
+
+// GetArchitectures gets all available architectures for the given repository
+func GetArchitectures(ctx context.Context, ownerID int64, repository string) ([]string, error) {
+ return packages_model.GetDistinctPropertyValues(
+ ctx,
+ packages_model.TypeArch,
+ ownerID,
+ packages_model.PropertyTypeFile,
+ arch_module.PropertyArchitecture,
+ &packages_model.DistinctPropertyDependency{
+ Name: arch_module.PropertyRepository,
+ Value: repository,
+ },
+ )
+}
diff --git a/models/packages/descriptor.go b/models/packages/descriptor.go
index b8ef698d38..803b73c968 100644
--- a/models/packages/descriptor.go
+++ b/models/packages/descriptor.go
@@ -13,6 +13,7 @@ import (
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/packages/alpine"
+ "code.gitea.io/gitea/modules/packages/arch"
"code.gitea.io/gitea/modules/packages/cargo"
"code.gitea.io/gitea/modules/packages/chef"
"code.gitea.io/gitea/modules/packages/composer"
@@ -150,6 +151,8 @@ func GetPackageDescriptor(ctx context.Context, pv *PackageVersion) (*PackageDesc
switch p.Type {
case TypeAlpine:
metadata = &alpine.VersionMetadata{}
+ case TypeArch:
+ metadata = &arch.VersionMetadata{}
case TypeCargo:
metadata = &cargo.Metadata{}
case TypeChef:
diff --git a/models/packages/package.go b/models/packages/package.go
index 65a2574150..417d62d199 100644
--- a/models/packages/package.go
+++ b/models/packages/package.go
@@ -31,6 +31,7 @@ type Type string
// List of supported packages
const (
TypeAlpine Type = "alpine"
+ TypeArch Type = "arch"
TypeCargo Type = "cargo"
TypeChef Type = "chef"
TypeComposer Type = "composer"
@@ -55,6 +56,7 @@ const (
var TypeList = []Type{
TypeAlpine,
+ TypeArch,
TypeCargo,
TypeChef,
TypeComposer,
@@ -82,6 +84,8 @@ func (pt Type) Name() string {
switch pt {
case TypeAlpine:
return "Alpine"
+ case TypeArch:
+ return "Arch"
case TypeCargo:
return "Cargo"
case TypeChef:
@@ -131,6 +135,8 @@ func (pt Type) SVGName() string {
switch pt {
case TypeAlpine:
return "gitea-alpine"
+ case TypeArch:
+ return "gitea-arch"
case TypeCargo:
return "gitea-cargo"
case TypeChef:
diff --git a/models/packages/package_file.go b/models/packages/package_file.go
index 1bb6b57a34..270cb32fdf 100644
--- a/models/packages/package_file.go
+++ b/models/packages/package_file.go
@@ -221,6 +221,11 @@ func SearchFiles(ctx context.Context, opts *PackageFileSearchOptions) ([]*Packag
return pfs, count, err
}
+// HasFiles tests if there are files of packages matching the search options
+func HasFiles(ctx context.Context, opts *PackageFileSearchOptions) (bool, error) {
+ return db.Exist[PackageFile](ctx, opts.toConds())
+}
+
// CalculateFileSize sums up all blob sizes matching the search options.
// It does NOT respect the deduplication of blobs.
func CalculateFileSize(ctx context.Context, opts *PackageFileSearchOptions) (int64, error) {