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.
|
// 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)
|
pkginfo, err := getPkginfo(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -138,7 +138,7 @@ func TestMetadata(t *testing.T) {
|
|||||||
archive.Close()
|
archive.Close()
|
||||||
assert.NoError(t, err)
|
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.NoError(t, err)
|
||||||
|
|
||||||
assert.Equal(t, md.Name, "zstd")
|
assert.Equal(t, md.Name, "zstd")
|
||||||
|
@ -4,15 +4,11 @@
|
|||||||
package arch
|
package arch
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
|
||||||
"io"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
pkg_model "code.gitea.io/gitea/models/packages"
|
pkg_model "code.gitea.io/gitea/models/packages"
|
||||||
"code.gitea.io/gitea/modules/context"
|
"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"
|
"code.gitea.io/gitea/routers/api/packages/helper"
|
||||||
pkg_service "code.gitea.io/gitea/services/packages"
|
pkg_service "code.gitea.io/gitea/services/packages"
|
||||||
arch_service "code.gitea.io/gitea/services/packages/arch"
|
arch_service "code.gitea.io/gitea/services/packages/arch"
|
||||||
@ -41,69 +37,7 @@ func Push(ctx *context.Context) {
|
|||||||
defer upload.Close()
|
defer upload.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
buf, err := pkg_module.CreateHashedBufferFromReader(upload)
|
_, _, err = arch_service.UploadArchPackage(ctx, upload, filename, distro, sign)
|
||||||
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,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
switch err {
|
switch err {
|
||||||
case pkg_model.ErrDuplicatePackageVersion, pkg_model.ErrDuplicatePackageFile:
|
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