mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-08-25 19:53:49 +00:00
feat: Replace mholt/archiver/v3 with mholt/archives (#7025)
Resolves #6266 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7025 Reviewed-by: Gusted <gusted@noreply.codeberg.org> Co-authored-by: Dmitrii Sharshakov <d3dx12.xx@gmail.com> Co-committed-by: Dmitrii Sharshakov <d3dx12.xx@gmail.com>
This commit is contained in:
parent
dd653c4784
commit
b8f92b6a26
7 changed files with 722 additions and 324 deletions
|
@ -5,7 +5,7 @@ package arch
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"io/fs"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
@ -14,7 +14,7 @@ import (
|
|||
|
||||
"forgejo.org/modules/packages"
|
||||
|
||||
"github.com/mholt/archiver/v3"
|
||||
"github.com/mholt/archives"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
|
@ -25,7 +25,7 @@ pkgbase = b
|
|||
pkgver = 1-2
|
||||
arch = x86_64
|
||||
`
|
||||
fs := fstest.MapFS{
|
||||
mapfs := fstest.MapFS{
|
||||
"pkginfo": &fstest.MapFile{
|
||||
Data: []byte(PKGINFO),
|
||||
Mode: os.ModePerm,
|
||||
|
@ -39,65 +39,111 @@ arch = x86_64
|
|||
}
|
||||
|
||||
// Test .PKGINFO file
|
||||
pinf, err := fs.Stat("pkginfo")
|
||||
require.NoError(t, err)
|
||||
|
||||
pfile, err := fs.Open("pkginfo")
|
||||
require.NoError(t, err)
|
||||
|
||||
parcname, err := archiver.NameInArchive(pinf, ".PKGINFO", ".PKGINFO")
|
||||
pinf, err := mapfs.Stat("pkginfo")
|
||||
require.NoError(t, err)
|
||||
|
||||
// Test .MTREE file
|
||||
minf, err := fs.Stat("mtree")
|
||||
minf, err := mapfs.Stat("mtree")
|
||||
require.NoError(t, err)
|
||||
|
||||
mfile, err := fs.Open("mtree")
|
||||
require.NoError(t, err)
|
||||
files := []archives.FileInfo{
|
||||
{
|
||||
FileInfo: pinf,
|
||||
NameInArchive: ".PKGINFO",
|
||||
Open: func() (fs.File, error) {
|
||||
return mapfs.Open("pkginfo")
|
||||
},
|
||||
},
|
||||
{
|
||||
FileInfo: minf,
|
||||
NameInArchive: ".MTREE",
|
||||
Open: func() (fs.File, error) {
|
||||
return mapfs.Open("mtree")
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
marcname, err := archiver.NameInArchive(minf, ".MTREE", ".MTREE")
|
||||
require.NoError(t, err)
|
||||
|
||||
t.Run("normal archive", func(t *testing.T) {
|
||||
t.Run("normal zst archive", func(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
|
||||
archive := archiver.NewTarZstd()
|
||||
archive.Create(&buf)
|
||||
|
||||
err = archive.Write(archiver.File{
|
||||
FileInfo: archiver.FileInfo{
|
||||
FileInfo: pinf,
|
||||
CustomName: parcname,
|
||||
},
|
||||
ReadCloser: pfile,
|
||||
})
|
||||
require.NoError(t, errors.Join(pfile.Close(), err))
|
||||
|
||||
err = archive.Write(archiver.File{
|
||||
FileInfo: archiver.FileInfo{
|
||||
FileInfo: minf,
|
||||
CustomName: marcname,
|
||||
},
|
||||
ReadCloser: mfile,
|
||||
})
|
||||
require.NoError(t, errors.Join(mfile.Close(), archive.Close(), err))
|
||||
archive := archives.CompressedArchive{
|
||||
Archival: archives.Tar{},
|
||||
Compression: archives.Zstd{},
|
||||
}
|
||||
archive.Archive(t.Context(), &buf, files)
|
||||
|
||||
reader, err := packages.CreateHashedBufferFromReader(&buf)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
require.NoError(t, err)
|
||||
defer reader.Close()
|
||||
_, err = ParsePackage(reader)
|
||||
pkg, err := ParsePackage(reader)
|
||||
|
||||
require.Equal(t, "zst", pkg.CompressType)
|
||||
require.Equal(t, "a", pkg.Name)
|
||||
require.Equal(t, "b", pkg.VersionMetadata.Base)
|
||||
require.Equal(t, "x86_64", pkg.FileMetadata.Arch)
|
||||
require.Equal(t, "1-2", pkg.Version)
|
||||
|
||||
require.NoError(t, err)
|
||||
})
|
||||
|
||||
t.Run("normal xz archive", func(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
archive := archives.CompressedArchive{
|
||||
Archival: archives.Tar{},
|
||||
Compression: archives.Xz{},
|
||||
}
|
||||
archive.Archive(t.Context(), &buf, files)
|
||||
|
||||
reader, err := packages.CreateHashedBufferFromReader(&buf)
|
||||
require.NoError(t, err)
|
||||
defer reader.Close()
|
||||
pkg, err := ParsePackage(reader)
|
||||
|
||||
require.Equal(t, "xz", pkg.CompressType)
|
||||
require.Equal(t, "a", pkg.Name)
|
||||
require.Equal(t, "b", pkg.VersionMetadata.Base)
|
||||
require.Equal(t, "x86_64", pkg.FileMetadata.Arch)
|
||||
require.Equal(t, "1-2", pkg.Version)
|
||||
|
||||
require.NoError(t, err)
|
||||
})
|
||||
|
||||
t.Run("normal gz archive", func(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
archive := archives.CompressedArchive{
|
||||
Archival: archives.Tar{},
|
||||
Compression: archives.Gz{},
|
||||
}
|
||||
archive.Archive(t.Context(), &buf, files)
|
||||
|
||||
reader, err := packages.CreateHashedBufferFromReader(&buf)
|
||||
require.NoError(t, err)
|
||||
defer reader.Close()
|
||||
pkg, err := ParsePackage(reader)
|
||||
|
||||
require.Equal(t, "gz", pkg.CompressType)
|
||||
require.Equal(t, "a", pkg.Name)
|
||||
require.Equal(t, "b", pkg.VersionMetadata.Base)
|
||||
require.Equal(t, "x86_64", pkg.FileMetadata.Arch)
|
||||
require.Equal(t, "1-2", pkg.Version)
|
||||
|
||||
require.NoError(t, err)
|
||||
})
|
||||
|
||||
t.Run("missing .PKGINFO", func(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
|
||||
archive := archiver.NewTarZstd()
|
||||
archive.Create(&buf)
|
||||
require.NoError(t, archive.Close())
|
||||
archive := archives.CompressedArchive{
|
||||
Archival: archives.Tar{},
|
||||
Compression: archives.Zstd{},
|
||||
}
|
||||
archive.Archive(t.Context(), &buf, []archives.FileInfo{
|
||||
{
|
||||
FileInfo: minf,
|
||||
NameInArchive: ".MTREE",
|
||||
Open: func() (fs.File, error) {
|
||||
return mapfs.Open("mtree")
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
reader, err := packages.CreateHashedBufferFromReader(&buf)
|
||||
require.NoError(t, err)
|
||||
|
@ -111,21 +157,20 @@ arch = x86_64
|
|||
|
||||
t.Run("missing .MTREE", func(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
|
||||
pfile, err := fs.Open("pkginfo")
|
||||
require.NoError(t, err)
|
||||
|
||||
archive := archiver.NewTarZstd()
|
||||
archive.Create(&buf)
|
||||
|
||||
err = archive.Write(archiver.File{
|
||||
FileInfo: archiver.FileInfo{
|
||||
FileInfo: pinf,
|
||||
CustomName: parcname,
|
||||
archive := archives.CompressedArchive{
|
||||
Archival: archives.Tar{},
|
||||
Compression: archives.Zstd{},
|
||||
}
|
||||
archive.Archive(t.Context(), &buf, []archives.FileInfo{
|
||||
{
|
||||
FileInfo: pinf,
|
||||
NameInArchive: ".PKGINFO",
|
||||
Open: func() (fs.File, error) {
|
||||
return mapfs.Open("pkginfo")
|
||||
},
|
||||
},
|
||||
ReadCloser: pfile,
|
||||
})
|
||||
require.NoError(t, errors.Join(pfile.Close(), archive.Close(), err))
|
||||
|
||||
reader, err := packages.CreateHashedBufferFromReader(&buf)
|
||||
require.NoError(t, err)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue