mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Add Debian package registry (#24426)
Co-authored-by: @awkwardbunny This PR adds a Debian package registry. You can follow [this tutorial](https://www.baeldung.com/linux/create-debian-package) to build a *.deb package for testing. Source packages are not supported at the moment and I did not find documentation of the architecture "all" and how these packages should be treated.  Part of #20751. Revised copy of #22854. --------- Co-authored-by: Brian Hong <brian@hongs.me> Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: Giteabot <teabot@gitea.io>
This commit is contained in:
		@@ -187,19 +187,33 @@ func createPackageAndVersion(ctx context.Context, pvci *PackageCreationInfo, all
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AddFileToExistingPackage adds a file to an existing package. If the package does not exist, ErrPackageNotExist is returned
 | 
			
		||||
func AddFileToExistingPackage(pvi *PackageInfo, pfci *PackageFileCreationInfo) (*packages_model.PackageVersion, *packages_model.PackageFile, error) {
 | 
			
		||||
func AddFileToExistingPackage(pvi *PackageInfo, pfci *PackageFileCreationInfo) (*packages_model.PackageFile, error) {
 | 
			
		||||
	return addFileToPackageWrapper(func(ctx context.Context) (*packages_model.PackageFile, *packages_model.PackageBlob, bool, error) {
 | 
			
		||||
		pv, err := packages_model.GetVersionByNameAndVersion(ctx, pvi.Owner.ID, pvi.PackageType, pvi.Name, pvi.Version)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, nil, false, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return addFileToPackageVersion(ctx, pv, pvi, pfci)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AddFileToPackageVersionInternal adds a file to the package
 | 
			
		||||
// This method skips quota checks and should only be used for system-managed packages.
 | 
			
		||||
func AddFileToPackageVersionInternal(pv *packages_model.PackageVersion, pfci *PackageFileCreationInfo) (*packages_model.PackageFile, error) {
 | 
			
		||||
	return addFileToPackageWrapper(func(ctx context.Context) (*packages_model.PackageFile, *packages_model.PackageBlob, bool, error) {
 | 
			
		||||
		return addFileToPackageVersionUnchecked(ctx, pv, pfci)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func addFileToPackageWrapper(fn func(ctx context.Context) (*packages_model.PackageFile, *packages_model.PackageBlob, bool, error)) (*packages_model.PackageFile, error) {
 | 
			
		||||
	ctx, committer, err := db.TxContext(db.DefaultContext)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	defer committer.Close()
 | 
			
		||||
 | 
			
		||||
	pv, err := packages_model.GetVersionByNameAndVersion(ctx, pvi.Owner.ID, pvi.PackageType, pvi.Name, pvi.Version)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pf, pb, blobCreated, err := addFileToPackageVersion(ctx, pv, pvi, pfci)
 | 
			
		||||
	pf, pb, blobCreated, err := fn(ctx)
 | 
			
		||||
	removeBlob := false
 | 
			
		||||
	defer func() {
 | 
			
		||||
		if removeBlob {
 | 
			
		||||
@@ -211,15 +225,15 @@ func AddFileToExistingPackage(pvi *PackageInfo, pfci *PackageFileCreationInfo) (
 | 
			
		||||
	}()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		removeBlob = blobCreated
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := committer.Commit(); err != nil {
 | 
			
		||||
		removeBlob = blobCreated
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return pv, pf, nil
 | 
			
		||||
	return pf, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewPackageBlob creates a package blob instance
 | 
			
		||||
@@ -236,12 +250,16 @@ func NewPackageBlob(hsr packages_module.HashedSizeReader) *packages_model.Packag
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func addFileToPackageVersion(ctx context.Context, pv *packages_model.PackageVersion, pvi *PackageInfo, pfci *PackageFileCreationInfo) (*packages_model.PackageFile, *packages_model.PackageBlob, bool, error) {
 | 
			
		||||
	log.Trace("Adding package file: %v, %s", pv.ID, pfci.Filename)
 | 
			
		||||
 | 
			
		||||
	if err := CheckSizeQuotaExceeded(ctx, pfci.Creator, pvi.Owner, pvi.PackageType, pfci.Data.Size()); err != nil {
 | 
			
		||||
		return nil, nil, false, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return addFileToPackageVersionUnchecked(ctx, pv, pfci)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func addFileToPackageVersionUnchecked(ctx context.Context, pv *packages_model.PackageVersion, pfci *PackageFileCreationInfo) (*packages_model.PackageFile, *packages_model.PackageBlob, bool, error) {
 | 
			
		||||
	log.Trace("Adding package file: %v, %s", pv.ID, pfci.Filename)
 | 
			
		||||
 | 
			
		||||
	pb, exists, err := packages_model.GetOrInsertBlob(ctx, NewPackageBlob(pfci.Data))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Error("Error inserting package blob: %v", err)
 | 
			
		||||
@@ -345,6 +363,8 @@ func CheckSizeQuotaExceeded(ctx context.Context, doer, owner *user_model.User, p
 | 
			
		||||
		typeSpecificSize = setting.Packages.LimitSizeConda
 | 
			
		||||
	case packages_model.TypeContainer:
 | 
			
		||||
		typeSpecificSize = setting.Packages.LimitSizeContainer
 | 
			
		||||
	case packages_model.TypeDebian:
 | 
			
		||||
		typeSpecificSize = setting.Packages.LimitSizeDebian
 | 
			
		||||
	case packages_model.TypeGeneric:
 | 
			
		||||
		typeSpecificSize = setting.Packages.LimitSizeGeneric
 | 
			
		||||
	case packages_model.TypeHelm:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user