refactoring in metadata module, better readability

shorter function calls in arch service
fix - request now ends if unable to decode package signature from hex
fix - now package search continues to previous versions in package file for required architecture not found for current version
This commit is contained in:
Danila Fominykh 2023-10-02 19:12:06 -03:00
parent 4bf84c1fd6
commit 8974d27ba3
No known key found for this signature in database
GPG Key ID: 1134F8EBF98AA06F
3 changed files with 52 additions and 81 deletions

View File

@ -104,18 +104,6 @@ func EjectMetadata(p *EjectParams) (*DbDesc, error) {
md.URL = value
case "packager":
md.Packager = value
case "builddate":
num, err := strconv.ParseInt(value, 10, 64)
if err != nil {
return nil, err
}
md.BuildDate = num
case "size":
num, err := strconv.ParseInt(value, 10, 64)
if err != nil {
return nil, err
}
md.InstalledSize = num
case "provides":
md.Provides = append(md.Provides, value)
case "license":
@ -132,6 +120,16 @@ func EjectMetadata(p *EjectParams) (*DbDesc, error) {
md.CheckDepends = append(md.CheckDepends, value)
case "backup":
md.Backup = append(md.Backup, value)
case "builddate":
md.BuildDate, err = strconv.ParseInt(value, 10, 64)
if err != nil {
return nil, err
}
case "size":
md.InstalledSize, err = strconv.ParseInt(value, 10, 64)
if err != nil {
return nil, err
}
}
}
@ -164,53 +162,38 @@ func getPkginfo(data io.Reader) (string, error) {
// Create pacman package description file.
func (m *DbDesc) String() string {
return strings.Join(rmEmptyStrings([]string{
formatField("FILENAME", m.Filename),
formatField("NAME", m.Name),
formatField("BASE", m.Base),
formatField("VERSION", m.Version),
formatField("DESC", m.Description),
formatField("CSIZE", m.CompressedSize),
formatField("ISIZE", m.InstalledSize),
formatField("MD5SUM", m.MD5),
formatField("SHA256SUM", m.SHA256),
formatField("URL", m.URL),
formatField("LICENSE", m.License),
formatField("ARCH", m.Arch),
formatField("BUILDDATE", m.BuildDate),
formatField("PACKAGER", m.Packager),
formatField("PROVIDES", m.Provides),
formatField("DEPENDS", m.Depends),
formatField("OPTDEPENDS", m.OptDepends),
formatField("MAKEDEPENDS", m.MakeDepends),
formatField("CHECKDEPENDS", m.CheckDepends),
}), "\n\n") + "\n\n"
}
func formatField(field string, value any) string {
switch value := value.(type) {
case []string:
if value == nil {
return ``
}
val := strings.Join(value, "\n")
return fmt.Sprintf("%%%s%%\n%s", field, val)
case string:
return fmt.Sprintf("%%%s%%\n%s", field, value)
case int64:
return fmt.Sprintf("%%%s%%\n%d", field, value)
var entries = []struct {
Key string
Value string
}{
{Key: "FILENAME", Value: m.Filename},
{Key: "NAME", Value: m.Name},
{Key: "BASE", Value: m.Base},
{Key: "VERSION", Value: m.Version},
{Key: "DESC", Value: m.Description},
{Key: "CSIZE", Value: fmt.Sprintf("%d", m.CompressedSize)},
{Key: "ISIZE", Value: fmt.Sprintf("%d", m.InstalledSize)},
{Key: "MD5SUM", Value: m.MD5},
{Key: "SHA256SUM", Value: m.SHA256},
{Key: "URL", Value: m.URL},
{Key: "LICENSE", Value: strings.Join(m.License, "\n")},
{Key: "ARCH", Value: strings.Join(m.Arch, "\n")},
{Key: "BUILDDATE", Value: fmt.Sprintf("%d", m.BuildDate)},
{Key: "PACKAGER", Value: m.Packager},
{Key: "PROVIDES", Value: strings.Join(m.Provides, "\n")},
{Key: "DEPENDS", Value: strings.Join(m.Depends, "\n")},
{Key: "OPTDEPENDS", Value: strings.Join(m.OptDepends, "\n")},
{Key: "MAKEDEPENDS", Value: strings.Join(m.MakeDepends, "\n")},
{Key: "CHECKDEPENDS", Value: strings.Join(m.CheckDepends, "\n")},
}
return ``
}
func rmEmptyStrings(s []string) []string {
var r []string
for _, str := range s {
if str != "" {
r = append(r, str)
var result string
for _, v := range entries {
if v.Value != "" {
result += fmt.Sprintf("%%%s%%\n%s\n\n", v.Key, v.Value)
}
}
return r
return result
}
// Create pacman database archive based on provided package metadata structs.

View File

@ -59,14 +59,15 @@ func Push(ctx *context.Context) {
}
props := map[string]string{
distro + "-" + filename + ".desc": desc.String(),
"desc": desc.String(),
}
if sign != "" {
_, err := hex.DecodeString(sign)
if err != nil {
apiError(ctx, http.StatusBadRequest, err)
return
}
props[distro+"-"+filename+".sig"] = sign
props["sign"] = sign
}
_, _, err = pkg_service.CreatePackageOrAddFileToExisting(

View File

@ -44,7 +44,7 @@ func GetPackageSignature(ctx *context.Context, distro, file string) (*bytes.Read
}
for _, pp := range proprs {
if pp.Name == distro+"-"+file {
if pp.Name == "sign" {
b, err := hex.DecodeString(pp.Value)
if err != nil {
return nil, err
@ -62,7 +62,6 @@ func getPackageFile(ctx *context.Context, distro, file string) (*pkg_model.Packa
splt = strings.Split(file, "-")
pkgname = strings.Join(splt[0:len(splt)-3], "-")
vername = splt[len(splt)-3] + "-" + splt[len(splt)-2]
compkey = distro + "-" + file
)
version, err := pkg_model.GetVersionByNameAndVersion(
@ -72,9 +71,7 @@ func getPackageFile(ctx *context.Context, distro, file string) (*pkg_model.Packa
return nil, err
}
pkgfile, err := pkg_model.GetFileForVersionByName(
ctx, version.ID, file, compkey,
)
pkgfile, err := pkg_model.GetFileForVersionByName(ctx, version.ID, file, distro)
if err != nil {
return nil, err
}
@ -106,36 +103,26 @@ func CreatePacmanDb(ctx *context.Context, owner, arch, distro string) (io.ReadSe
return versions[i].CreatedUnix > versions[j].CreatedUnix
})
for _, version := range versions {
filename := fmt.Sprintf(
"%s-%s-%s.pkg.tar.zst",
pkg.Name, version.Version, arch,
)
for _, ver := range versions {
file := fmt.Sprintf("%s-%s-%s.pkg.tar.zst", pkg.Name, ver.Version, arch)
file, err := pkg_model.GetFileForVersionByName(
ctx, version.ID, filename, distro+"-"+filename,
)
pf, err := pkg_model.GetFileForVersionByName(ctx, ver.ID, file, distro)
if err != nil {
filename := fmt.Sprintf(
"%s-%s-any.pkg.tar.zst",
pkg.Name, version.Version,
)
file, err = pkg_model.GetFileForVersionByName(
ctx, version.ID, filename, distro+"-"+filename,
)
file = fmt.Sprintf("%s-%s-any.pkg.tar.zst", pkg.Name, ver.Version)
pf, err = pkg_model.GetFileForVersionByName(ctx, ver.ID, file, distro)
if err != nil {
return nil, err
continue
}
}
pps, err := pkg_model.GetProperties(ctx, pkg_model.PropertyTypeFile, file.ID)
pps, err := pkg_model.GetProperties(ctx, pkg_model.PropertyTypeFile, pf.ID)
if err != nil {
return nil, err
}
var descvalue string
for _, pp := range pps {
if strings.HasSuffix(pp.Name, ".desc") {
if pp.Name == "desc" {
descvalue = pp.Value
}
}
@ -144,7 +131,7 @@ func CreatePacmanDb(ctx *context.Context, owner, arch, distro string) (io.ReadSe
continue
}
entries[pkg.Name+"-"+version.Version+"/desc"] = []byte(descvalue)
entries[pkg.Name+"-"+ver.Version+"/desc"] = []byte(descvalue)
break
}
}