summaryrefslogtreecommitdiffstats
path: root/models/packages/conda
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--models/packages/conda/search.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/models/packages/conda/search.go b/models/packages/conda/search.go
new file mode 100644
index 0000000..887441e
--- /dev/null
+++ b/models/packages/conda/search.go
@@ -0,0 +1,63 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package conda
+
+import (
+ "context"
+ "strings"
+
+ "code.gitea.io/gitea/models/db"
+ "code.gitea.io/gitea/models/packages"
+ conda_module "code.gitea.io/gitea/modules/packages/conda"
+
+ "xorm.io/builder"
+)
+
+type FileSearchOptions struct {
+ OwnerID int64
+ Channel string
+ Subdir string
+ Filename string
+}
+
+// SearchFiles gets all files matching the search options
+func SearchFiles(ctx context.Context, opts *FileSearchOptions) ([]*packages.PackageFile, error) {
+ var cond builder.Cond = builder.Eq{
+ "package.type": packages.TypeConda,
+ "package.owner_id": opts.OwnerID,
+ "package_version.is_internal": false,
+ }
+
+ if opts.Filename != "" {
+ cond = cond.And(builder.Eq{
+ "package_file.lower_name": strings.ToLower(opts.Filename),
+ })
+ }
+
+ var versionPropsCond builder.Cond = builder.Eq{
+ "package_property.ref_type": packages.PropertyTypePackage,
+ "package_property.name": conda_module.PropertyChannel,
+ "package_property.value": opts.Channel,
+ }
+
+ cond = cond.And(builder.In("package.id", builder.Select("package_property.ref_id").Where(versionPropsCond).From("package_property")))
+
+ var filePropsCond builder.Cond = builder.Eq{
+ "package_property.ref_type": packages.PropertyTypeFile,
+ "package_property.name": conda_module.PropertySubdir,
+ "package_property.value": opts.Subdir,
+ }
+
+ cond = cond.And(builder.In("package_file.id", builder.Select("package_property.ref_id").Where(filePropsCond).From("package_property")))
+
+ sess := db.GetEngine(ctx).
+ Select("package_file.*").
+ Table("package_file").
+ Join("INNER", "package_version", "package_version.id = package_file.version_id").
+ Join("INNER", "package", "package.id = package_version.package_id").
+ Where(cond)
+
+ pfs := make([]*packages.PackageFile, 0, 10)
+ return pfs, sess.Find(&pfs)
+}