diff --git a/modules/packages/arch/metadata.go b/modules/packages/arch/metadata.go index d8ca5ed1b7..4149e87bfa 100644 --- a/modules/packages/arch/metadata.go +++ b/modules/packages/arch/metadata.go @@ -6,7 +6,6 @@ package arch import ( "archive/tar" "bufio" - "bytes" "compress/gzip" "encoding/hex" "fmt" @@ -215,10 +214,13 @@ func rmEmptyStrings(s []string) []string { } // Create pacman database archive based on provided package metadata structs. -func CreatePacmanDb(entries map[string][]byte) ([]byte, error) { - var out bytes.Buffer +func CreatePacmanDb(entries map[string][]byte) (io.ReadSeeker, error) { + out, err := pkg_module.NewHashedBuffer() + if err != nil { + return nil, err + } - gw := gzip.NewWriter(&out) + gw := gzip.NewWriter(out) tw := tar.NewWriter(gw) for name, content := range entries { @@ -244,5 +246,5 @@ func CreatePacmanDb(entries map[string][]byte) ([]byte, error) { tw.Close() gw.Close() - return out.Bytes(), nil + return out, nil } diff --git a/routers/api/packages/arch/arch.go b/routers/api/packages/arch/arch.go index d0a4357bbd..e7499b4a47 100644 --- a/routers/api/packages/arch/arch.go +++ b/routers/api/packages/arch/arch.go @@ -4,7 +4,6 @@ package arch import ( - "bytes" "encoding/hex" "io" "net/http" @@ -160,7 +159,7 @@ func Get(ctx *context.Context) { return } - ctx.ServeContent(bytes.NewReader(db), &context.ServeHeaderOptions{ + ctx.ServeContent(db, &context.ServeHeaderOptions{ Filename: file, }) return diff --git a/services/packages/arch/service.go b/services/packages/arch/service.go index 5e01e49b37..bddc9a78e1 100644 --- a/services/packages/arch/service.go +++ b/services/packages/arch/service.go @@ -77,7 +77,7 @@ func RepoConnect(ctx *context.Context, owner, repo string, pkgid int64) error { // requested combination of architecture and distribution. When/If the first // compatible version is found, related desc file will be loaded from database // and added to resulting .db.tar.gz archive. -func CreatePacmanDb(ctx *context.Context, owner, arch, distro string) ([]byte, error) { +func CreatePacmanDb(ctx *context.Context, owner, arch, distro string) (io.ReadSeeker, error) { pkgs, err := pkg_model.GetPackagesByType(ctx, ctx.Package.Owner.ID, pkg_model.TypeArch) if err != nil { return nil, err