diff --git a/modules/packages/arch/metadata.go b/modules/packages/arch/metadata.go index 4149e87bfa..970008686b 100644 --- a/modules/packages/arch/metadata.go +++ b/modules/packages/arch/metadata.go @@ -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. diff --git a/routers/api/packages/arch/arch.go b/routers/api/packages/arch/arch.go index 1622c08876..2a0f23557f 100644 --- a/routers/api/packages/arch/arch.go +++ b/routers/api/packages/arch/arch.go @@ -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( diff --git a/services/packages/arch/service.go b/services/packages/arch/service.go index c82e7cc720..327b12f9c9 100644 --- a/services/packages/arch/service.go +++ b/services/packages/arch/service.go @@ -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 } }