mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 18:18:03 -04:00 
			
		
		
		
	By default, the code extracts 200 package versions. If too many packages are generated every day or if rule cleaning is enabled later, which means there are more than 200 versions corresponding to the library package, it may not be cleaned up completely, resulting in residue Fix #31961 --------- Co-authored-by: yeyuanjie <yecao100@126.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2023 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package nuget
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"strings"
 | |
| 
 | |
| 	"code.gitea.io/gitea/models/db"
 | |
| 	packages_model "code.gitea.io/gitea/models/packages"
 | |
| 
 | |
| 	"xorm.io/builder"
 | |
| )
 | |
| 
 | |
| // SearchVersions gets all versions of packages matching the search options
 | |
| func SearchVersions(ctx context.Context, opts *packages_model.PackageSearchOptions) ([]*packages_model.PackageVersion, int64, error) {
 | |
| 	cond := toConds(opts)
 | |
| 
 | |
| 	e := db.GetEngine(ctx)
 | |
| 
 | |
| 	total, err := e.
 | |
| 		Where(cond).
 | |
| 		Count(&packages_model.Package{})
 | |
| 	if err != nil {
 | |
| 		return nil, 0, err
 | |
| 	}
 | |
| 
 | |
| 	inner := builder.
 | |
| 		Dialect(db.BuilderDialect()). // builder needs the sql dialect to build the Limit() below
 | |
| 		Select("*").
 | |
| 		From("package").
 | |
| 		Where(cond).
 | |
| 		OrderBy("package.name ASC")
 | |
| 	if opts.Paginator != nil {
 | |
| 		skip, take := opts.Paginator.GetSkipTake()
 | |
| 		inner = inner.Limit(take, skip)
 | |
| 	}
 | |
| 
 | |
| 	sess := e.
 | |
| 		Where(opts.ToConds()).
 | |
| 		Table("package_version").
 | |
| 		Join("INNER", inner, "package.id = package_version.package_id")
 | |
| 
 | |
| 	pvs := make([]*packages_model.PackageVersion, 0, 10)
 | |
| 	return pvs, total, sess.Find(&pvs)
 | |
| }
 | |
| 
 | |
| // CountPackages counts all packages matching the search options
 | |
| func CountPackages(ctx context.Context, opts *packages_model.PackageSearchOptions) (int64, error) {
 | |
| 	return db.GetEngine(ctx).
 | |
| 		Where(toConds(opts)).
 | |
| 		Count(&packages_model.Package{})
 | |
| }
 | |
| 
 | |
| func toConds(opts *packages_model.PackageSearchOptions) builder.Cond {
 | |
| 	var cond builder.Cond = builder.Eq{
 | |
| 		"package.is_internal": opts.IsInternal.Value(),
 | |
| 		"package.owner_id":    opts.OwnerID,
 | |
| 		"package.type":        packages_model.TypeNuGet,
 | |
| 	}
 | |
| 	if opts.Name.Value != "" {
 | |
| 		if opts.Name.ExactMatch {
 | |
| 			cond = cond.And(builder.Eq{"package.lower_name": strings.ToLower(opts.Name.Value)})
 | |
| 		} else {
 | |
| 			cond = cond.And(builder.Like{"package.lower_name", strings.ToLower(opts.Name.Value)})
 | |
| 		}
 | |
| 	}
 | |
| 	return cond
 | |
| }
 |