mirror of
https://github.com/go-gitea/gitea.git
synced 2024-09-01 14:56:30 +00:00
moved upload function to arch service
This commit is contained in:
parent
54a9c8bdff
commit
6052aea5f2
@ -58,7 +58,7 @@ type DbDesc struct {
|
||||
}
|
||||
|
||||
// Function that receives arch package archive data and returns it's metadata.
|
||||
func EjectMetadata(file, distro string, b *pkg_module.HashedBuffer) (*DbDesc, error) {
|
||||
func ParseMetadata(file, distro string, b *pkg_module.HashedBuffer) (*DbDesc, error) {
|
||||
pkginfo, err := getPkginfo(b)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -138,7 +138,7 @@ func TestMetadata(t *testing.T) {
|
||||
archive.Close()
|
||||
assert.NoError(t, err)
|
||||
|
||||
md, err := EjectMetadata("zstd-1.5.5-1-x86_64.pkg.tar.zst", "archlinux", buf)
|
||||
md, err := ParseMetadata("zstd-1.5.5-1-x86_64.pkg.tar.zst", "archlinux", buf)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Equal(t, md.Name, "zstd")
|
||||
|
@ -4,15 +4,11 @@
|
||||
package arch
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
pkg_model "code.gitea.io/gitea/models/packages"
|
||||
"code.gitea.io/gitea/modules/context"
|
||||
pkg_module "code.gitea.io/gitea/modules/packages"
|
||||
arch_module "code.gitea.io/gitea/modules/packages/arch"
|
||||
"code.gitea.io/gitea/routers/api/packages/helper"
|
||||
pkg_service "code.gitea.io/gitea/services/packages"
|
||||
arch_service "code.gitea.io/gitea/services/packages/arch"
|
||||
@ -41,69 +37,7 @@ func Push(ctx *context.Context) {
|
||||
defer upload.Close()
|
||||
}
|
||||
|
||||
buf, err := pkg_module.CreateHashedBufferFromReader(upload)
|
||||
if err != nil {
|
||||
apiError(ctx, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
defer buf.Close()
|
||||
|
||||
desc, err := arch_module.EjectMetadata(filename, distro, buf)
|
||||
if err != nil {
|
||||
apiError(ctx, http.StatusBadRequest, err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = buf.Seek(0, io.SeekStart)
|
||||
if err != nil {
|
||||
apiError(ctx, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
properties := map[string]string{
|
||||
"desc": desc.String(),
|
||||
}
|
||||
if sign != "" {
|
||||
_, err := hex.DecodeString(sign)
|
||||
if err != nil {
|
||||
apiError(ctx, http.StatusBadRequest, err)
|
||||
return
|
||||
}
|
||||
properties["sign"] = sign
|
||||
}
|
||||
|
||||
_, _, err = pkg_service.CreatePackageOrAddFileToExisting(
|
||||
ctx, &pkg_service.PackageCreationInfo{
|
||||
PackageInfo: pkg_service.PackageInfo{
|
||||
Owner: ctx.Package.Owner,
|
||||
PackageType: pkg_model.TypeArch,
|
||||
Name: desc.Name,
|
||||
Version: desc.Version,
|
||||
},
|
||||
Creator: ctx.Doer,
|
||||
Metadata: &arch_module.Metadata{
|
||||
URL: desc.ProjectURL,
|
||||
Description: desc.Description,
|
||||
Provides: desc.Provides,
|
||||
License: desc.License,
|
||||
Depends: desc.Depends,
|
||||
OptDepends: desc.OptDepends,
|
||||
MakeDepends: desc.MakeDepends,
|
||||
CheckDepends: desc.CheckDepends,
|
||||
},
|
||||
},
|
||||
&pkg_service.PackageFileCreationInfo{
|
||||
PackageFileInfo: pkg_service.PackageFileInfo{
|
||||
Filename: filename,
|
||||
CompositeKey: distro,
|
||||
},
|
||||
OverwriteExisting: true,
|
||||
IsLead: true,
|
||||
Creator: ctx.ContextUser,
|
||||
Data: buf,
|
||||
Properties: properties,
|
||||
},
|
||||
)
|
||||
_, _, err = arch_service.UploadArchPackage(ctx, upload, filename, distro, sign)
|
||||
if err != nil {
|
||||
switch err {
|
||||
case pkg_model.ErrDuplicatePackageVersion, pkg_model.ErrDuplicatePackageFile:
|
||||
|
90
services/packages/arch/upload.go
Normal file
90
services/packages/arch/upload.go
Normal file
@ -0,0 +1,90 @@
|
||||
// Copyright 2023 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package arch
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"io"
|
||||
|
||||
packages_model "code.gitea.io/gitea/models/packages"
|
||||
"code.gitea.io/gitea/modules/context"
|
||||
packages_module "code.gitea.io/gitea/modules/packages"
|
||||
arch_module "code.gitea.io/gitea/modules/packages/arch"
|
||||
packages_service "code.gitea.io/gitea/services/packages"
|
||||
)
|
||||
|
||||
// UploadArchPackage adds an Arch Package to the registry.
|
||||
// The first return value indictaes if the error is a user error.
|
||||
func UploadArchPackage(ctx *context.Context, upload io.Reader, filename, distro, sign string) (bool, *packages_model.PackageVersion, error) {
|
||||
buf, err := packages_module.CreateHashedBufferFromReader(upload)
|
||||
if err != nil {
|
||||
return false, nil, err
|
||||
}
|
||||
defer buf.Close()
|
||||
|
||||
desc, err := arch_module.ParseMetadata(filename, distro, buf)
|
||||
if err != nil {
|
||||
return false, nil, err
|
||||
}
|
||||
|
||||
_, err = buf.Seek(0, io.SeekStart)
|
||||
if err != nil {
|
||||
return false, nil, err
|
||||
}
|
||||
|
||||
properties := map[string]string{
|
||||
"desc": desc.String(),
|
||||
}
|
||||
if sign != "" {
|
||||
_, err := hex.DecodeString(sign)
|
||||
if err != nil {
|
||||
return true, nil, errors.New("unable to decode package signature")
|
||||
}
|
||||
properties["sign"] = sign
|
||||
}
|
||||
|
||||
ver, _, err := packages_service.CreatePackageOrAddFileToExisting(
|
||||
ctx, &packages_service.PackageCreationInfo{
|
||||
PackageInfo: packages_service.PackageInfo{
|
||||
Owner: ctx.Package.Owner,
|
||||
PackageType: packages_model.TypeArch,
|
||||
Name: desc.Name,
|
||||
Version: desc.Version,
|
||||
},
|
||||
Creator: ctx.Doer,
|
||||
Metadata: &arch_module.Metadata{
|
||||
URL: desc.ProjectURL,
|
||||
Description: desc.Description,
|
||||
Provides: desc.Provides,
|
||||
License: desc.License,
|
||||
Depends: desc.Depends,
|
||||
OptDepends: desc.OptDepends,
|
||||
MakeDepends: desc.MakeDepends,
|
||||
CheckDepends: desc.CheckDepends,
|
||||
},
|
||||
},
|
||||
&packages_service.PackageFileCreationInfo{
|
||||
PackageFileInfo: packages_service.PackageFileInfo{
|
||||
Filename: filename,
|
||||
CompositeKey: distro,
|
||||
},
|
||||
OverwriteExisting: true,
|
||||
IsLead: true,
|
||||
Creator: ctx.ContextUser,
|
||||
Data: buf,
|
||||
Properties: properties,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
switch err {
|
||||
case packages_model.ErrDuplicatePackageVersion, packages_model.ErrDuplicatePackageFile, packages_service.ErrQuotaTotalCount, packages_service.ErrQuotaTypeSize, packages_service.ErrQuotaTotalSize:
|
||||
return true, nil, err
|
||||
default:
|
||||
return false, nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return false, ver, nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user