Arch Linux helpers and parsers
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

194 lines
33 KiB

package archlinux
import (
"bytes"
"fmt"
"io"
"os"
"testing"
"maze.io/archlinux.v0/version"
)
type testReadNamer struct {
name string
io.Reader
}
func (r testReadNamer) Name() string {
return r.name
}
func ExampleParsePackageName() {
fmt.Println(ParsePackageName("go-2:1.9-1"))
// Output: go 2:1.9-1 <nil>
}
func ExampleParsePackageArchiveName() {
fmt.Println(ParsePackageArchiveName("go-2:1.9-1-x86_64.pkg.tar.xz"))
// Output: go 2:1.9-1 x86_64 .pkg.tar.xz <nil>
}
// This example demonstrates how to load a package from disk
func ExampleReadPackage() {
f, err := os.Open("go-2:1.9-1-x86_64.pkg.tar.xz")
if err != nil {
fmt.Println("error opening package:", err)
return
}
defer f.Close()
pkg, err := ReadPackage(f)
if err != nil {
fmt.Println("error reading package:", err)
return
}
fmt.Println(pkg, pkg.Description)
}
func testComparePackage(t *testing.T, a, b *Package) {
t.Helper()
if b.Name != a.Name {
t.Fatalf(`expected package %q, got %q`, a.Name, b.Name)
}
if b.Version != a.Version {
t.Fatalf(`expected version %q, got %q"`, a.Version, b.Version)
}
if b.Release != a.Release {
t.Fatalf(`expected version %q, got %q"`, a.Release, b.Release)
}
if l := len(b.Arch); l != len(a.Arch) {
t.Fatalf(`expected %d arch(s), got %d`, len(a.Arch), l)
}
if b.Arch[0] != a.Arch[0] {
t.Fatalf(`expected arch %q, got %q`, a.Arch[0], b.Arch[0])
}
if b.Size != a.Size {
t.Fatalf(`expected size %d, got %d`, a.Size, b.Size)
}
}
func TestReadPackage(t *testing.T) {
var tests = []struct {
Name string
io.Reader
Package
}{
{"pkg.tar.bz2", bytes.NewBuffer(testReadPackageTarBz2), testReadPackage},
{"pkg.tar.gz", bytes.NewBuffer(testReadPackageTarGz), testReadPackage},
}
for _, test := range tests {
t.Run(test.Name, func(t *testing.T) {
p, err := ReadPackage(testReadNamer{test.Name, test.Reader})
if err != nil {
t.Fatal(err)
}
testComparePackage(t, &test.Package, p)
})
}
}
var (
testReadPackage = Package{
Name: "imagemagick",
Version: "6.9.9.15",
Release: "1",
Arch: []string{"x86_64"},
Size: 9897984,
}
testReadPackageTarBz2 = []byte("\x42\x5a\x68\x39\x31\x41\x59\x26\x53\x59\x45\x5e\xb7\x73\x00\x02\x94\x7f\x94\xc8\x10\x02\x40\x68\x0b\xff\xf7\x7f\xbf\xdf\xc0\xff\xff\xff\xf0\x20\x00\x00\x04\x80\x08\x60\x08\xbf\x6f\x5d\xcb\xbd\x84\x3b\x8a\x3c\xa7\x9d\x41\xdd\x8c\x9d\x1d\x02\xa9\x6e\x0d\x13\x44\x69\xa2\x6c\x80\x46\xd2\x99\x20\x7a\x13\xd4\x6d\x40\x34\xc4\xd3\xd4\x00\xda\x6a\x69\xa0\xd4\xf4\x8d\x1a\x99\x34\x10\x4c\x53\xc9\xa8\xf4\x80\x36\xa1\xa0\x00\x68\x7a\x41\xa0\x34\x11\x4f\xd1\xa1\x15\x00\x0d\x34\xd0\xd0\x00\x00\x00\x00\x00\x00\x0c\xd2\x84\x2a\x9f\xe9\x92\x6a\x9f\x82\xa7\x9a\x86\xd3\x54\x7a\x99\x3d\x46\x43\x0d\x21\x88\xc9\x90\x01\x90\x71\x93\x26\x86\x23\x13\x46\x01\x18\x09\x84\x01\x80\x9a\x68\xd3\x23\x40\x30\x91\x40\x40\x11\xa0\x98\x53\xca\x64\xd2\x68\x34\x01\xa6\x83\x13\x40\x06\x8d\x1a\x79\xff\x7f\x77\x94\xd4\x56\x73\x9a\x44\x68\x24\x8d\xdb\x77\x17\x16\xcb\x6e\xf2\x92\x55\x46\x63\x49\x40\x3f\x9a\x76\x09\xf0\xe0\x03\xb5\x7d\xfd\xfd\x1c\xe9\x9a\x24\xaf\xca\x76\x63\x08\x63\x58\xd4\x87\x98\xc2\x10\x40\x09\x74\x09\x04\x10\x44\x43\x59\x40\x17\x12\xa3\x75\x12\x83\x44\x22\x04\x29\x2b\xd5\x2a\x80\x69\x92\x00\x0f\x24\x84\x04\x84\x08\x84\x46\xd1\xf4\xaa\xbf\xf2\x9c\x2e\x17\x07\xdf\xf8\x92\xf4\xcf\x08\x00\x3f\x51\xb7\x34\xed\x5b\x41\xd7\x76\x9a\xe8\x4d\x8f\x88\xc8\x54\x36\x10\x08\x28\x56\xdc\xef\x82\xc4\x3b\x8c\xcc\x19\x89\xac\x33\xca\x1a\x23\x26\x05\x06\xa6\xca\x37\x6a\x14\x12\x4b\x6b\x24\x30\x01\x49\xa1\xb4\xbf\x86\x28\x3b\x8b\x7e\x06\x1e\xc7\x0e\x3c\x22\xa6\xd8\x14\x62\x4b\x36\x07\xca\x21\xa0\x5b\x1a\xc5\xa2\x20\x07\x03\x00\x12\x19\x01\xd1\xd7\xf3\xe9\x4e\x33\xa7\x74\xa5\x03\x4b\x54\x08\x64\x00\xf0\xf4\x0b\x76\x72\x61\x63\x8a\xe5\xf2\x1d\x6b\xad\xf6\x43\x08\x8e\x58\x8b\x69\x14\xb1\x6b\xab\x25\xad\x97\x65\x2a\xbb\x65\xd2\xd8\x5a\x5a\x88\x08\x4a\x18\x12\x66\x4e\xbb\x11\x30\xeb\x61\x8b\xc0\xbf\x06\xa6\x2e\xe9\xec\x8a\x62\xed\xdc\x4b\x56\xb4\x74\xde\x86\xde\x15\x79\x1d\x4a\xa4\xbb\x33\x42\xd7\xbf\xcb\x77\x7c\x39\x4f\x2c\x1b\x65\x10\x86\x55\xaa\x88\xd9\x2a\x3b\x46\x31\x5a\xd4\x6a\x5a\xd8\x6e\x39\x24\xca\x45\xa0\x7e\x27\x0c\xc9\x5d\x5a\x2c\x93\x9c\x5e\xcd\x0d\xa9\x98\xb9\x2f\xa1\xd8\xd0\x15\x9a\x9c\x79\xa6\xae\xbb\x8c\x94\x63\x03\x5d\x96\xda\xfe\x06\x27\x84\x06\x13\xed\x4a\x25\x7e\xab\x98\x23\x23\x71\x7e\x98\xe8\xa3\x57\x14\xf7\x6a\xa8\x81\x4f\x2a\x46\x45\x1b\x91\xa8\xcd\x2a\xbc\x0c\x96\xe5\x22\x37\x39\x89\x6b\x72\x0b\xc3\x6b\x9d\xf5\x22\x4f\x48\x80\x38\xa9\x5a\xb8\x86\x2f\x43\x19\xc0\x58\x54\xb2\x72\x08\xbb\x33\x31\x47\x4a\x58\xc1\x08\x4a\x20\xa8\x47\x41\x50\xe0\x52\xa5\xe8\xb0\xe0\x85\x2e\xc8\xae\x20\x23\x40\x60\xce\x50\xbb\xb0\x85\xab\x28\x44\x95\x42\xc1\x0a\xc1\xa3\x43\x24\xb3\xa5\x0b\xc2\xbd\x61\x5a\xaa\x8a\x8b\x04\x88\xa1\x25\x91\x62\xc1\x2b\x56\x28\xb2\xce\x00\x84\x10\x8d\x53\x28\xf4\x57\x0d\x00\x13\x10\xee\x1d\xd9\x98\x38\x54\x01\x59\x67\xf7\xb1\xae\xdc\xb7\x80\x73\x70\xcd\xdc\x36\x78\x99\xd3\xba\x85\x3e\x4a\xa1\x79\x35\xa2\x4c\x0f\xa6\x26\x38\xa5\xe8\x37\xb6\x3e\x2c\x5c\x46\x11\x3d\x20\xc4\x21\xa0\x62\x39\xee\x4d\xff\x3f\xdf\x6a\x74\xb5\xa9\x08\x9a\xa0\x53\xbc\xa9\xa6\x3c\x6d\x16\x5d\x39\x59\x66\x57\x36\xda\x55\x1a\x4d\x0b\x15\x51\x22\x63\x46\x14\x14\x1f\x12\xb6\x69\x44\xa1\x1a\x63\xd9\x14\xd5\x14\x10\x50\x70\x60\x84\x28\x35\x12\xca\x4c\xf8\x72\x8e\x0d\x51\x8f\x08\x28\x6a\x3d\x50\x8a\xbe\xde\xfa\xce\x6d\x03\x0b\xd6\x64\x38\x44\x42\xf1\xf0\x8f\xd5\x33\x44\x33\x54\x43\xfa\x69\x4e\xff\x1d\x95\xab\xd0\x80\x43\x72\x94\xca\xad\xc1\x33\xa2\x2d\x63\x5b\x05\xb2\xce\xa2\xc2\x45\x2b\xd1\x6a\xac\x3e\x88\x9e\x3c\x37\x78\x2a\xd5\xb6\xee\xd5\x85\xf9\x34\xf1\xc3\x30\x15\x64\x5b\xc4\x0a\x85\x84\x5a\x40\x01\x0f\x29\x1d\x22\xce\xe5\x7d\x18\xab\x85\x27\xdf\x6c\x6c\x13\x3c\x57\x35\x05\x29\x47\x6f\xde\x80\x55\x92\x8c\xe4\x24\xb8\xb8\x13\x2a\x25\x80\xe3\xc6\x99\xe5\x7d\xe6\x97\xd8\x14\x0a\xc1\x92\xa8\xe1\x5e\x23\x0c\xf2\x7a\xb9\x39\x8f\x39\x0f\xb9\x4e\x2f\x05\xb3\xd3\x15\xb9\xa3\x63\x3c\x87\xbd\x40\x42\xe8\x42\x00\xb2\x8d\x3d\x76\xb8\xc5\x7f\x9c\x56\x39\xd9\x71\xd1\x5d\x9c\xd9\x69\xcb\x05\x2f\xb8\x80\x1b\x2d\x72\x24\x08\x02\x08\x47\x09\x95\xe6\x4b\xab\xaa\xe5\xc2\x2c\x82\x94\xa2\xd1\x1c\x49\x21\xe1\xeb\x53\x2d\xcc\xfb\x1a\xc2\x70\x4c\x08\x7c\xd0\x13\x35\xbf\x0b\x24\x6d\xc8\x9b\x34\x6f\xef\x4b\x95\x47\x26\x30\xef\xbf\x17\x5c\x77\x54\x00\x1c\x0b\xaa\x64\xd6\xb1\x1f\xbd\xfb\xfa\x99\xc3\x67\x6e\xf0\x36\xef\x90\x70\xed\xdd\xee\x20\x4b\xf6\xcd\xbe\x8f\x7f\xa8\x81\x20\x9a\x4f\xa8\x6f\x57\x75\xa9\x31\x81\x4b\x15\x7f\x05\x05\x1e\x1c\xdc\x7b\x58\x39\x35\xe9\x60\x11\xe9\xbb\x5f\xc0\xe5\x90\x6b\xe5\x71\x02\x7a\x03\xdc\x26\x2b\xbe\xe1\x07\xa9\xae\xa8\x4c\x05\x81\x96\x20\x00\x61\x79\x19\xfa\x59\xeb\x89\x08\xe7\xb1\xd7\xcf\x38\x13\x17\xd2\xba\xfb\xaa\xf9\x77\x86\x17\xa5\xaa\xca\xb7\x99\xd0\xf0\x39\xe5\x7e\x3b\x9d\x0e\xb3\x14\xb9\x0e\x6e\x89\xf0\x19\x94\xa6\x36\x16\xa1\x4a\xcc\xa7\x13\xcc\xc3\x9b\x44\x4c\x20\x75\x61\x83\x3a\x0c\xa3\x10\x43\xe3\xba\xff\x73\x44\xd7\x5e\x90\x12\x30\x36\xe9\xaf\x81\xd6\x5c\x67\x83\xb2\x28\x5d\xb0\xb4\x3c\x33\xa9\x20\xda\x56\xc3\xdb\x25\xa3\xdd\x68\x7a\x78\xca\xc9\xe1\x25\x59\xa0\x24\x01\x92\x84\x0e\x86\xfa\xbd\x56\x97\xb9\x72\x7a\x5f\xb0\x35\x59\x85\x31\x70\x81\x85\x50\x28\x0c\x06\x31\xb0\x4d\xa6\x31\x26\x0d\x36\xc4\xd2\x18\x34\x31\xa6\x34\xc6\x81\xa4\xd0\x31\xa4\xd8\x95\xaf\x61\xcf\xd1\xce\xa7\x58\x5d\x85\x26\x69\xc7\x7e\xcd\xb6\x6b\x86\x95\xb8\x24\x00\x92\x28\x00\x12\x29\x22\x05\x02\x29\x82\xf8\xf6\x08\x2d\xad\xdd\x15\x49\x88\xea\xcf\xaf\x0b\x16\x97\x9e\x4a\xcf\x36\x9d\x26\x1a\x5b\x6a\xc9\xf1\x44\xe9\x54\x9e\xcd\x8e\x68\x20\xbb\x8f\xb7\x77\x4c\xd0\xbd\x7a\x17\xfa\x8a\x4a\x5a\xf0\x00\x03\x5c\x35\x24\x16\x69\x99\x4b\x4a\xde\x0c\xce\x70\x62\x11\x53\xeb\x80\x58\xf4\xb1\x1e\xf5\x20\x92\x0b\xd9\xb6\xf8\x5c\xeb\x62\xa1\x1e\xc6\x54\xb9\x15\xc9\x84\xae\xc8\x75\xc9\x0b\x0c\x3a\xcf\x95\x6d\xad\x0e\x64\x59\x91\xc3\xe6\xf1\x53\x57\x0e\xca\x32\xe3\x1c\xbb\x7c\x7a\xaf\x61\x7a\x54\xbd\x28\x38\x26\xa6\xf9\xf8\xea\xbe\xfe\xa3\x9f\x0d\x65\x07\xf1\x49\x4a\x67\x91\x5c\xd7\xe9\x30\xad\x73\xc1\x0f\x49\x2b\xc9\xb4\xa8\xb9\xcc\x28\x9a\x51\xe8\x32\xbe\x2c\x0c\x86\x14\x36\xef\x17\x04\xa9\x34\x23\xa6\xe8\x29\xf2\xe8\xcb\x1d\x9b\x6b\x0e\x60\x80\x97\x19\x85\xe6\x53\xeb\x44\x05\xb6\x4a\x7b\xba\x4c\x2d\x0c\x73\x22\x70\x41\x26\xce\xe8\x8a\xe0\xeb\x9d\x69\x86\xae\x75\xbf\x89\x5f\x18\x00\x1a\xac\x47\x2a\x62\xda\x14\xb4\x92\x94\x02\xe0\x94\xa9\xad\x53\x30\xaa\xd6\x32\x44\x6c\xf9\xc4\x71\x13\x8c\x4a\xa3\x00\x0b\x2c\x88\x00\xb1\x55\xe9\x42\x71\xca\x08\x5b\x01\x6a\x6f\x1d\xb6\xe6\xa9\x29\x10\x59\x15\x22\x69\xb2\xf2\x65\xed\x2b\x19\xa3\x8d\x00\x00\xd2\x92\xec\xdf\xbf\x94\xd3\x68\x16\x5a\x41\x2e\xf6\x21\x71\xcb\x6c\xc9\x71\x34\xf7\x65\xbc\x00\x0a\x1e\x4b\x4d\x84\xd6\xd6\xa0\x67\x4b\xe9\x69\x6e\xea\xf6\x47\x77\x0b\x2f\xfb\x10\x98\x65\x30\xbe\x7a\x24\x06\x59\x84\x70\xc6\x99\x66\x99\x2d\xd6\x2b\x66\x5d\x6e\x73\x8c\x72\x5f\x31\x70\x8b\x0a\x49\x3a\x8d\x60\x84\x1c\xac\xf7\xc7\x94\x90\x5d\x32\x08\x11\x98\x38\xb2\x88\x89\xa3\xc9\xc1\x8f\x29\x57\x75\x4b\x24\x22\x05\x40\x00\x80\x4f\x19\x5f\x36\xd1\x04\x3d\x8b\x2e\x70\x3c\x04\x60\xf4\xdd\x26\x7b\x1e\x07\x2d\x74\x2c\x57\x06\xd6\x45\x11\x80\x8b\xc2\x05\x81\xa8\x0f\xdb\x88\x23\xc1\x95\x44\x52\xde\x1d\xc4\x65\x3c\x50\x64\x19\x84\xd1\xac\xed\xe1\xaf\x6f\x04\x2c\xa3\xc0\x95\x21\xb3\x32\x7b\x6d\x7b\x26\x1a\x3c\x6d\x87\x95\x1c\xcf\x6e\xb5\x92\x48\x1a\x26\xa9\xab\x91\xa8\x95\x1e\x08\xc3\x33\x33\xa6\xe4\x17\x20\xaf\x2d\x74\xe9\x6e\xcc\x75\x4f\x03\x63\x22\x23\x5f\x7c\x12\x21\x1c\x31\xc6\xd3\x89\xaa\xce\xed\x86\x70\xa1\x74\x89\x88\x63\x8e\x7c\xe5\x5e\x3b\xcd\x09\x33\xc4\xc0\x2e\x0c\xc8\xdb\x16\x92\x2e\xc6\xdc\xc5\x40\x7d\x49\x0a\x1b\x40\x6f\x2f\x54\x46\xa0\xae\x19\x1e\x09\x25\xad\x81\xa1\x14\x10\x46\x18\x58\xe7\x0b\xf8\x08\xbb\x1d\xe5\xad\x51\xf6\x46\xca\x4a\x2a\x6f\xaf\x7f\x22\xfb\x38\x53\x20\x2a\xa1\x78\xa6\xfa\xee\x83\x6e\xcb\x21\xb7\x16\xb2\x67\x3e\xba\x51\x6b\x18\xa0\x00\x00\x28\x2d\x7e\xa0\xf4\x6d\x00\xbe\x07\x99\xa0\xcc\xc3\x0a\x1e\x00\x96\x6c\x0c\xa1\x2a\x4e\xe1\xc5\xca\x79\xd6\xf9\x12\xf0\xc4\x40\x05\xf7\xc2\xf1\x27\x3d\x4a\xa2\x38\x11\xc4\x73\x33\xa5\x24\x8b\x76\xc7\xc3\x2c\x42\xa0\x41\x5b\x34\x8c\x2c\x68\xae\x0e\x09\x42\xd1\x90\x90\xc0\xc4\x40\x81\x70\xda\x25\x4a\x81\x0b\xaf\x5d\x3b\x3b\xb3\xec\x11\x78\x70\xda\xd4\x2d\x79\x10\x27\xa1\x01\x8b\x23\x38\xa7\xc0\x2a\x60\x99\x4d\x8c\x75\x5a\xbb\x41\x90\x69\x90\x8d\x68\xe8\x03\x90\xa3\xc6\x59\x57\x97\xfd\xa7\x2b\xae\x58\x61\xc3\x6f\x4a\xbc\x77\x68\x10\x02\x41\x43\xe7\x69\x8e\x94\x92\x28\x80\x40\xa4\xea\xdd\xc5\x39\x6d\x48\xec\xe5\xde\xdd\x79\xab\x76\x8c\x96\x9d\xcd\xbf\xfc\x5d\xc9\x14\xe1\x42\x41\x15\x7a\xdd\xcc")
testReadPackageTarGz = []byte("\x1f\x8b\x08\x00\x2b\xf1\xcc\x59\x00\x03\xed\x58\x5b\x8f\xdb\xb6\x12\xde\x67\xff\x0a\x15\x7d\x0c\xa4\xd5\x5d\xd6\xa2\x2d\x7a\x0f\x72\x4e\xd3\x06\xcd\xe9\x39\x7d\x0b\x28\x89\x92\x19\xeb\xc2\x25\xa9\xb5\xd7\xbf\xfe\xcc\x50\xde\xae\x4c\xca\x71\x5e\xd2\x22\x80\x19\x04\x5e\xcd\x37\x1c\x0e\x87\xdf\x8c\x86\xf2\xde\xfc\xfb\xe5\xab\x5f\x7f\xfe\xed\xe6\x13\x0e\x1f\x46\x1a\xc7\xfa\x17\x86\xf9\x1b\x25\x51\x74\x13\x44\x41\x1a\x24\x49\x94\x25\xc1\x8d\x1f\xf8\x69\x9a\xdc\x38\xfe\xa7\x74\xea\x69\x8c\x52\x11\xe1\x38\x37\x62\x18\xd4\x87\xf4\x2e\xe1\x9f\xe9\xf8\xd2\x79\x49\x7b\x2a\x88\xa2\x95\x53\x3c\x3a\x1d\xd9\x52\xbe\x6d\x9c\xc4\xf3\xbd\x70\xf5\xa5\x33\x4a\xd6\x37\x4e\x0d\x52\xdc\xbf\xf3\x40\x85\x64\x43\xef\x04\x5e\x88\xe8\x5b\xa2\x9c\xb7\x94\x3b\x61\xe4\x84\xc1\x5d\x12\xdd\xc5\x89\xf3\xc7\x7f\x7e\x70\x42\x3f\xc8\x56\x60\xa6\x27\x1d\x75\xbe\x76\x58\x47\x1a\x0a\xff\x59\xb9\x45\x69\x41\xe4\x82\x14\x4c\x83\x30\xf5\x72\xf8\x17\x24\x6e\x80\xb2\x8a\xca\x12\x84\xdf\xf5\x93\xb2\xf3\xc0\xe8\x0e\xfc\xb9\xed\x48\xcf\xf8\xd8\x12\x85\xbe\x70\x31\x34\x82\x74\xab\x51\xb4\xa0\xbb\x51\x8a\xdf\xdd\xde\xee\x76\x3b\x6f\xb6\x80\x37\x88\xe6\x76\x55\x8c\xac\xad\x2a\xd8\x2a\xe8\x05\x89\x9f\x86\x7e\x94\x86\xc9\x8a\x93\x72\x0b\x9a\x42\xaf\xa4\x86\x9e\x0d\xce\xef\xc3\x7b\x22\x9d\xaf\x88\xc0\xdf\x6f\x89\x28\x37\x2d\xeb\xc7\x3d\x9a\xf9\x66\x25\xd9\x01\x2d\xe4\xeb\x3c\xcb\xd7\xf1\x0a\x51\x78\xdc\xaf\xd3\x77\x69\xbc\x6a\x59\x49\x7b\xbd\xbf\x12\x98\x35\x74\xab\x02\xac\x8f\x1c\x9e\xa9\x2a\x6f\x5f\xa1\x4b\xaf\xb5\x4b\x6e\x7a\x5b\x0e\x15\x15\xde\xbe\x6b\x3f\xac\xd4\x0e\x42\x5e\xd2\xaa\x68\x4b\x1b\xd8\xd9\x45\xc5\x76\x68\x2e\xa9\xe8\x90\x5d\x54\x62\x1d\xbd\xa4\xc3\x07\x88\xc6\xe3\x25\xad\xfb\x91\xf4\x8a\x1d\xf4\x61\xba\x8a\x14\xed\x45\xbb\x6a\x23\xa8\xdc\x0c\x6d\x75\x71\xb7\xea\x91\x5f\xb6\x06\x3a\x6e\x45\xdf\x93\x87\xf1\xa3\x54\x9b\xcd\x20\x95\x2c\x05\xe3\xea\xa3\xf4\x81\xb1\xd5\xb0\x9b\x5c\xad\x28\xa7\x7d\x05\xba\x2d\x2b\x5a\x55\xcd\x05\x65\x27\xc3\x13\x7c\xaf\x9e\x1f\xeb\xa1\x57\xe5\xd0\xd7\xac\x39\x55\xa1\x73\x25\xb4\x79\x2f\x4e\x9e\x05\xb9\xef\x9e\x05\x03\xfc\x96\xad\xcb\xca\xca\x6d\x07\x02\xdc\x7b\x86\x38\x15\xed\x37\x5f\x27\x5e\x98\x9e\xca\xbe\x02\x51\xb6\x1a\xb8\xfa\x4b\x3a\xcb\x2a\xb7\x1a\xca\x3b\xf0\x4d\x38\xa4\xaa\x18\x9e\x1f\x69\x1d\xd6\x83\xa0\xd3\xa7\x79\x32\x6f\x16\xb6\x69\xce\xcb\x67\x81\x23\x47\xce\x07\xa1\x4e\x26\xa0\xb7\x74\x2f\x26\xe5\xdf\xe0\xe1\xa7\x3f\x7f\x3f\xab\xf8\x9e\xd3\x26\x9c\x54\xff\xf5\x26\x5c\x54\x83\x70\xec\xba\x7a\xd2\xf9\xdf\xeb\x9f\xcf\xe9\x08\xf9\xd0\x4c\x4a\x6f\xff\xfb\xf2\x9c\x12\x9c\xe5\x71\xb5\x3f\x5f\xff\x72\x4e\x89\xf7\x47\x43\x6f\x7e\x3d\x6b\x68\x47\x0b\x7e\x74\xe9\xa7\xef\xdf\x9c\xf5\x89\xec\x26\xa5\x1f\x67\x96\xb0\x54\x5b\x7c\x3a\x15\x6a\x4e\x99\x7a\x7b\x63\xea\x8c\x5b\x96\x2a\x35\x95\x67\xa7\x78\x0a\x1c\x4f\xcb\x32\x01\x21\xb7\x64\x18\x62\x7b\x2d\x08\xa9\xbd\xa7\x7b\x61\x2f\xa3\xcf\xda\x36\x4a\x76\x0b\x32\xa0\xbf\x35\x1f\x52\x60\x43\x91\xfe\x72\x11\x9b\xa5\x87\xb5\x19\x38\xad\x53\xa1\x1c\x8b\xe3\x3b\xd1\x88\x53\x3b\xae\xfe\xe9\x57\xfb\x47\x0d\xef\xfb\x3f\x5e\xfd\xf2\xe3\xa7\xed\x00\xe7\xfd\x5f\x06\x8d\x1d\xfc\x04\x59\xf2\x57\xff\x97\x65\x7e\x8a\xfd\x5f\x18\x85\x59\x08\x9a\xd0\xff\x85\x61\x12\xfd\xcd\xfd\xdf\x8e\xbd\xef\x49\x5f\x9d\xd5\xbb\x84\x7f\xa6\x63\xea\x89\x18\x36\x3f\xb7\xfa\x6f\xdd\xa1\xe1\x1f\xef\xe4\x86\x84\x49\x2a\xc7\x0e\xb0\x22\xcf\xf3\xac\xaa\xb2\xac\x0a\x12\x1a\xa5\x91\x9f\x94\x75\x16\x67\x75\xb6\x8e\x6b\x42\x62\x5a\xd2\xba\xa2\x31\x25\x61\x9e\xd1\xb8\x5e\x57\x69\x9a\xc7\x80\x44\x34\xca\x53\x3f\x2a\xca\xa9\xf7\xa2\xfd\x03\xd8\xfa\xa2\x62\x52\x95\x27\x22\xdd\xe4\x9c\xe8\x94\x25\x29\x37\xf4\x44\x67\x43\xa1\x53\x9c\xeb\x48\xd6\xe8\x77\x0c\x64\x9f\xc4\x5c\x54\x50\x96\x66\xcf\xf0\x76\x92\xb3\xc7\x2f\x20\x81\xd5\x30\xb4\x73\x11\x9c\xbd\x62\x25\x00\x73\x45\xda\x71\xf5\x08\x21\x99\xcb\x0e\x8c\x43\xd3\x39\x13\xf0\x51\x34\x74\x6e\x0a\xff\x84\x8a\x3f\x17\x8d\x7c\x3f\x7f\xac\x68\x31\x36\x2b\xd6\xc3\xa2\x6d\x4b\xb1\x4a\x10\x28\x37\xa1\x17\x7a\x49\xe8\x46\xa7\xc0\x53\xc7\xe9\x6e\xe9\xa3\x80\x96\xd7\xc5\x96\xda\x4f\x83\x00\x1a\xe3\x13\x45\xa5\x04\x98\x88\xbd\x38\x73\xc3\x53\x64\x54\x03\x96\x75\x40\xd3\xdc\x8d\x2d\x0c\xcb\x95\x1b\x60\xab\x7d\x3a\x0f\xba\xf3\x8d\x0b\xf6\x3c\xc8\x42\x13\x02\x8f\x14\x6b\x25\xfa\xbc\xf6\x7c\xc3\xe7\x82\x49\x68\xe0\x22\xb8\x38\xc4\xe6\x3c\x88\x5e\x08\x6b\xf9\x5e\xea\xa6\x27\x48\x49\xdc\x92\x0a\xc5\x6a\x56\x62\xf3\x3a\xed\x32\xf2\x33\x63\x97\xa6\x1a\x70\x03\x1e\x51\x3b\xf6\xd7\x61\x6c\xec\xce\xd4\xee\x86\x03\x6b\x5b\x02\xae\x45\x81\xe1\xb3\xa9\x7a\xdc\xde\x19\x2f\x06\x41\x27\x85\x35\x34\x45\x26\x28\xa0\x0d\x04\x22\x41\x6c\x72\xd8\xa6\x01\xc2\xdd\xc4\xcd\xbc\x24\xf6\xcc\xf3\xab\x0a\x37\xf1\x22\x08\xa7\xe1\x58\xc5\xea\x7a\x5a\x2b\xb2\xac\xd1\xb0\x96\x78\xe9\x91\x10\xd2\x38\x82\x68\x1b\xf0\x9e\x13\xa5\x69\x65\x2e\xf6\x74\x8d\x83\x79\x61\x60\x9c\x51\xcd\x5a\x8a\xae\x58\x73\x40\x2e\x1f\xa5\xa2\x9d\x0e\x8b\xe7\x47\xd6\xc4\xbe\x9a\x3c\x8d\xbd\x14\x48\x61\xa0\x2d\xdd\x23\x03\x2d\x2f\x9f\xbb\x0e\x80\x83\xd0\x8b\x4c\x5c\x50\x8a\xed\x33\x70\xd0\x5b\x1b\x46\x1b\xb2\xdb\xc2\x6a\x81\x45\xb4\xa6\x84\x28\xa3\x13\x81\x21\x46\x39\x70\xdd\x08\x32\xca\x31\xf7\x97\xc1\xaa\xe8\x30\x3f\x4c\xc7\x1a\xaa\x14\xb4\x45\xae\xef\x05\xb9\xb7\xf6\xcc\x38\x36\x60\x10\x7d\x4e\xec\x2d\x21\x54\xe2\xc1\x24\x6e\x72\x0a\x74\xdc\x4d\xc1\x85\xd0\x9c\xd0\x8f\x5c\x87\x07\x8f\x2b\x32\x21\xa5\xc9\x91\x2c\x78\xc8\x9b\x0e\x53\x3b\xb7\x52\x14\xee\xc9\x7c\xc3\x14\x80\x77\x01\xb0\x2e\xb0\x02\x25\x28\xc7\x0c\xb6\xc4\x43\x5d\x23\x69\x70\x4f\xd9\x29\x34\x22\x6f\x90\x6c\x96\xf3\x90\xf4\x30\xc7\x3c\xbb\x0d\x11\x75\x31\x1e\x0e\xc8\x5d\x8b\xd9\x8c\xf4\xc4\x85\x6b\xd4\x94\x81\x49\x60\xda\x64\xe5\xe8\x26\xb9\xc5\xeb\x6d\x01\xe9\xa0\x06\x5d\x61\xcc\xbc\x84\xfa\x39\xb1\x33\xc0\x50\x99\x3b\xdb\x8a\x22\xd1\x45\xd0\xb2\x09\xac\x07\x46\xaf\x4d\x73\x70\x84\x58\x9b\xd9\x03\xc5\x72\x02\xb3\x12\x0b\x96\x12\x2e\xb4\xba\x26\x9b\x07\x83\x28\x14\x5e\x56\xbe\x1b\x38\x92\xce\x0e\x00\x32\x84\xf0\x89\x23\x8b\x08\xbc\x09\x60\x8f\x10\x55\x0b\xad\x6b\x06\x2e\x85\x16\x21\x11\x82\x5c\x83\xd6\x16\x37\xba\xe4\x53\x53\x8a\x47\x8e\x45\x21\xb3\xa2\x87\x28\x50\x90\x0a\x31\x08\x24\xc0\x02\xce\x4a\xaa\x03\x9f\x2f\x40\x55\x0f\x50\xb4\xb0\xe4\x56\x16\x04\x21\x2b\x83\xb1\xe7\xaf\x74\x04\xe0\x15\x14\xdb\xd1\xed\x78\xa9\x57\x33\xab\x10\x40\x7d\x83\xdf\x7e\xf0\x3d\x13\x46\xf6\x71\xea\xeb\x18\x60\xa9\x17\x2e\x78\xca\x65\x8b\x09\x9d\x59\xf5\x0b\xcb\x03\x91\xed\x94\x84\x70\x5a\xd6\x4c\x49\x4b\x41\x75\x35\x58\x7b\xc9\x8b\x20\x7e\xd1\xe4\xf9\xda\x4f\x93\x85\xf3\x93\x58\x4f\x30\x51\xec\x25\xe4\x06\xfd\x5e\x2f\x2e\xaf\x8b\x6f\xe5\x86\x10\x47\x2b\x1c\x8a\xc8\x3e\xc0\x52\x68\x66\x0a\x62\x4c\x1c\x83\x65\x16\x8f\x63\x23\xa4\x83\x9c\xba\x6b\x13\x1b\x7b\x86\xad\x94\xa6\x5a\xbe\x44\x89\x51\x61\x8b\x44\x85\x26\x54\x6a\xbb\x8c\x09\xe7\x4e\xed\x0b\x54\x8c\x85\x3d\xed\xb1\x8f\x81\xa3\x58\x08\xd2\x9e\x8c\xda\x67\xb3\x6e\x68\x68\x37\x6d\x67\x81\x50\xfb\xb2\x40\x6f\x16\xc2\xb0\xaf\xba\x92\x6b\x4f\x97\x40\xac\xe4\xc8\xc3\x25\x93\x35\xbe\x45\xa3\xc5\x69\xdb\x42\xbf\x2f\xcf\xf0\x7e\xdf\x8d\x67\x17\xe4\xdd\x54\xb4\x97\x30\x01\x77\x47\x88\x2a\x46\xdd\xaa\x54\xfa\xe2\xae\xad\xda\x41\xc3\x40\x13\xce\x9e\x6e\xb5\xc8\x07\xdf\xce\x80\x43\xac\xcb\x7e\x66\x19\xe8\x62\x5d\x8c\x03\xb3\xa8\xe8\x0e\x31\x5e\x28\x29\x1d\xaf\x05\xec\x02\x2b\x2a\x37\xf7\xd1\x43\xaf\x23\xa1\x93\x82\xb7\xf0\x8b\xa9\x8a\x5b\x45\xa3\x87\x37\x68\xab\xeb\xa7\x09\x70\xb5\x71\xed\x0d\xe2\xbd\x5c\x42\x0e\xe2\xe6\x7d\xaf\x36\x50\x0e\x5c\xda\x32\xcc\x40\x48\x7b\x73\x29\x4e\x4a\x68\xdb\x5d\xfd\x35\x7b\x19\xea\x18\xd6\xb6\x16\x18\x3f\xbd\x74\x62\xcb\x5d\x4e\x3a\x4d\x11\xf3\x44\x40\x8e\x5f\xb2\x71\x5a\xe4\xe7\xa1\x19\x3d\x68\xc2\xca\x0d\x10\xc8\x8e\x37\x87\x8a\x01\x2d\x64\x6c\x19\xa4\xd0\x25\xe2\x27\x38\x7b\x29\xd6\xd3\x5e\x89\x47\x4d\x38\x0b\xdc\x36\xee\xb1\x93\x82\x5d\xe6\xd6\x46\x05\xb0\x02\x38\x42\xe1\x85\x03\x93\x7d\x33\xe8\x13\xe9\xa6\x17\x28\xb0\xc6\x6e\x84\x24\xad\xf0\x3e\x60\x4c\x83\xcb\x61\x35\xec\x34\x60\xa8\xdf\xb7\xd8\x61\x44\xd8\x1e\x99\x6b\xc9\xb1\x1a\x74\x9d\x0b\x7d\x9b\x39\x70\x0d\xc7\xfa\x98\x1b\x64\x83\x66\x0b\x3f\x29\x02\xa1\xcc\x9a\xaf\x0e\x15\x51\x44\x1f\x5b\x61\xd8\xfa\x70\x05\xda\x6d\x98\x3e\x1a\xab\x09\xde\x17\x4c\x75\x84\x4b\x4d\x35\x33\x0e\x58\x62\x9e\xfa\x8c\xc0\xbc\xb0\x61\x21\x99\xc0\x6c\x81\x2a\xfb\x41\x34\x6e\x3b\x32\x75\x34\x6c\xac\xfa\x34\xd1\xb7\xdb\xef\xfd\x01\x19\x61\x05\xf2\x80\x37\x0d\xcc\x66\x48\x4e\x9c\xf2\x4f\x7f\x45\xb8\x8e\xeb\xb8\x8e\xeb\xb8\x8e\xeb\xb8\x8e\xeb\xb8\x8e\xeb\xb8\x8e\xcf\x61\xfc\x1f\xca\x42\x92\xdb\x00\x28\x00\x00")
testReadPackageTarXz = []byte("\x1f\x9d\x90\x2e\xa0\x2c\x39\x92\xc4\x89\x91\x27\x00\x12\x2a\x5c\xc8\xb0\xa1\xc3\x87\x10\x23\x4a\x9c\x48\x11\x00\x8c\x8b\x30\x6c\xd0\xa0\x61\x11\x23\xc6\x8e\x1e\x61\x80\xf4\x38\xa3\xc6\x8c\x19\x00\x62\xcc\x88\x61\x23\x46\x0d\x93\x37\x6a\xc4\xb0\x18\x23\xa3\x8d\x1a\x00\x40\x88\xac\xc8\xb3\xa7\xcf\x9f\x40\xeb\xcc\xa1\x13\x46\x0e\x08\x10\x00\xe4\xbc\x79\x43\x07\x28\x44\xa5\x4c\x9d\x4a\x9d\x4a\xb5\xaa\xd5\xab\x58\xa9\x8e\x00\x71\xa4\x8c\x9b\x32\x72\xc2\xd0\x29\x43\x06\x84\x98\x3c\x20\xda\x84\x59\x53\x06\xce\x9a\x33\x20\x6a\xb8\x80\xe1\x42\x86\x82\xad\x42\xd3\xb8\x81\x6b\x66\x2d\xd8\xa5\x74\x40\xd8\x01\x3b\x27\xcd\x1b\x37\x20\x62\xd4\xb5\xbb\x75\x8a\x58\x10\x53\xda\x82\x90\x31\x63\x72\x0c\x1d\x26\x75\xd0\xa8\x01\xa2\x0a\x95\x21\x93\x61\xc4\xb8\xa1\xc0\xed\x19\x37\x61\xda\x94\x01\xd1\x03\x44\x1a\xb5\x67\xca\xc0\x4e\x33\x66\x4d\xe9\xb7\x62\xc2\xcc\x59\xdd\xfa\x75\x98\xd8\xb3\x6b\xdf\x3e\x33\xd8\x68\x6b\x1b\x2e\x72\x24\x77\xe1\xb2\x45\x8c\xe1\x64\xca\xcc\x19\xc3\x1a\x44\x10\xc4\xbe\x63\x0b\x4e\x53\xe6\x8e\xde\x33\x2f\xd4\xba\x49\x03\xa7\x0e\x1b\xb1\x86\x11\xc3\x51\x7a\x26\x6c\x1b\x05\x75\xe4\xb0\xa9\x8e\x86\x0e\x1d\x38\x3a\x5e\xbc\xb8\xc3\xdf\x45\x76\xd9\xbf\xd1\xb6\x86\x0b\x6f\xc8\x01\x9e\x02\x62\xd4\x91\x06\x1b\x64\x90\x21\x16\x6f\x89\xd5\x90\x91\x0c\x30\xcc\x60\x83\x0c\x35\x94\x16\x46\x6d\xbf\x81\x55\xdd\x75\x74\x1c\x66\x18\x08\x52\xbc\xa1\x86\x6e\x20\xf0\x50\x94\x89\xba\x01\x51\xd4\x18\x68\xb0\xa1\x57\x1d\x78\x10\x68\xa0\x0f\x0a\x14\xa6\x07\x84\x39\xe0\x90\xc3\x0d\x3d\xd2\xa0\xc0\x8b\x68\x54\x87\x07\x0e\x36\x7c\xa1\x91\x02\x32\x8e\xe1\xd5\x6e\xd5\x8d\x21\x54\x88\xef\xe5\x56\x5b\x1d\x70\x54\x57\x06\x1d\x63\xbc\x90\x04\x6c\x65\x34\x11\x60\x6d\x2d\xd8\xf0\xc2\x18\x6f\x44\x27\x87\x0b\x78\xb4\xc1\x06\x82\x1b\xae\x81\xa5\x96\x5c\x7a\x09\xa6\x98\x67\x08\x58\xe6\x99\x6f\xb0\x51\xe0\x1c\x6c\xba\x09\xe7\x95\x59\xb6\xb6\x65\x97\x5f\x76\x88\xa7\x9e\x66\x46\xc7\x46\x19\x67\x3c\x08\x68\x9b\x6f\x5a\x29\x67\xa1\x20\x1c\x6a\xa7\xa2\x63\xae\xb1\xa7\x9f\x67\x04\x5a\x69\x9c\x73\x1a\x5a\x67\xa2\xb1\x2d\x4a\xa6\x99\xc1\x89\x3a\xe8\xa5\x74\x22\x7a\x67\xa7\x7b\xb6\xf1\x5a\x19\xae\x5a\x5a\x6a\xa6\xa7\xce\x9a\xe7\xaa\x2f\xc0\xd1\x27\x6d\x79\xe4\x4a\x2a\xa6\x9a\xa2\x1a\x26\xad\x66\xc6\x51\x47\x18\x6e\xd0\x91\x86\x1e\xe8\x1d\xd6\x02\x51\x62\x3c\x6a\x2c\xa1\xb1\x6e\x9a\x2a\xb3\x2f\xd0\x81\x86\x1c\xd2\xa1\xd1\x27\x19\x93\x0a\xaa\x2b\xb2\xbd\x72\xfa\xab\xa7\x66\xd2\x91\x07\x1c\xb8\x52\xfa\xea\xae\xc9\xfa\xca\x68\xb8\xf3\x96\xd1\x42\x74\x27\xda\x51\xc7\xb6\xb0\x9a\x2a\xab\xbb\xfb\xca\x4b\x6f\x0b\x67\x98\x3b\xd4\x74\x72\x90\x47\x07\xc1\xf8\xb6\xfb\xed\xbb\x7b\x2a\xec\xaf\x77\x6e\x90\xf1\xc6\x1d\xe9\xbe\x19\x1d\xbd\x1d\x57\x27\x63\xb6\x74\x90\x21\x72\x5b\x5e\x95\xd5\x1a\x1b\x63\xb4\x31\x87\x5d\x23\xb7\x6c\x72\x1a\x62\xe0\x41\x87\x02\x35\x97\xdc\x9a\x19\x87\x71\x79\x98\x19\x69\x9c\xc1\x33\xcb\x3e\x83\x70\x32\x1e\x65\xe8\x7c\x34\xc9\x2e\x2b\x8d\x33\x1b\x71\xc8\xf1\xb4\xcd\x2f\xe3\x1c\x56\x1c\xef\xf5\x1c\xf5\x1b\x24\x8f\xc1\x46\x0b\xb4\x91\xd1\x82\x9f\x61\xa8\x79\x75\xd2\xf4\xca\xe7\x43\x0f\x72\xc9\x60\xc3\xda\x51\xb7\xcd\x06\x0f\x71\x93\x06\x76\xca\x48\x47\xfd\x5f\x70\x9e\x7a\x3c\x86\x0e\x20\x00\x6d\x54\xda\x64\xa4\x21\xed\x61\x61\xcc\xa7\x97\xe1\x6a\x2d\xee\x86\x02\x7b\x7b\x5d\x5d\xc3\x6f\x3c\x3c\x46\xc4\x70\xd0\x41\xb8\xe1\x5c\x39\x4c\x07\xc4\x12\x83\x30\x07\x96\xc2\xca\xb1\x73\xe5\x7d\x57\x07\xb6\x57\x4d\xcb\xf1\x79\x81\x20\x3c\x41\x72\x11\x58\x48\x61\x3a\xea\x05\xae\xde\xb9\xe5\xad\xbd\xee\x86\x1a\xf4\x9e\x21\xc3\xec\x46\x29\x01\x85\x0c\xbb\xc3\x91\xba\xef\x7c\x43\x7d\xb3\x18\x77\xb4\x61\x06\xf2\x20\x5c\xd1\x84\x11\xcd\x3f\x4f\xf9\xef\xad\x67\x2d\x86\x1c\x73\xd8\x71\x06\xf6\x53\x58\x71\x44\xf7\xbd\x7f\x1f\x3d\xd6\x52\xe7\xec\xe6\xf1\x85\xd3\x8e\x45\x13\x4c\xb0\xaf\xba\xfb\xc0\xc7\x0f\xc7\x5e\xd8\x83\x82\x13\xd6\x77\x3a\xe7\xb5\x8f\x75\xd2\x13\xdf\x1d\xca\x20\x06\xfc\xd4\xcf\x28\x57\x28\x82\x10\xa0\xa0\x3f\xe8\xf5\xef\x64\x61\xb9\x03\xf6\x88\x30\xc0\x0a\x2a\x40\x2d\x6c\xb9\xe0\xd4\x52\xf6\x26\x10\x92\x25\x7c\x4a\x8b\xd9\xcc\x3e\xe8\x17\x11\xe6\x6c\x67\x26\xec\x1f\xd0\xa2\x85\x26\x37\x10\xcd\x68\x31\x44\xe1\xd2\x9a\x06\xc3\x16\xa2\x10\x73\x9a\xe3\x5c\x0f\x43\x88\x42\xe1\xc5\x8e\x85\x44\x4c\x60\xfc\xaa\x67\x06\x24\x9e\x50\x89\x18\x2c\x1f\x0e\x7d\x08\x45\x9c\x51\xca\x2e\x39\xac\x62\xb6\xaa\xe6\xc4\xfe\x09\x8f\x78\x90\xc2\x22\x15\xe1\x87\xc1\x30\xdc\xa1\x8b\x3a\xd4\x5a\x18\xb8\x86\x46\x25\x0a\x4f\x6c\x2d\x40\x43\x19\xd2\x46\x98\x36\xc2\xef\x8d\x63\x2b\xdb\xd9\xde\x40\x47\xab\x65\x91\x8c\x38\x5b\x60\x03\xed\x98\xb4\xd3\x89\xa1\x38\x85\x39\x0c\x21\xa3\x76\x06\x36\xd4\x41\x01\x59\x89\xa4\x24\x27\x49\x49\x9e\xb8\x40\x08\x55\x48\x02\x13\x88\x50\x90\x83\x54\xf2\x93\x54\xf1\x88\x46\x38\xe2\x91\x1b\xdc\x04\x24\xa3\x91\xd0\x48\x30\x72\x83\x1b\x64\x24\x25\x2b\xa1\x8c\x0c\x6e\x40\xa1\x57\x8a\x46\x06\x18\x42\x89\x4e\x40\xc9\xcb\x48\x4e\xa9\x28\x47\x01\x80\x77\xd4\x80\x9a\x8e\x59\x65\x98\xc5\x24\x43\x2f\x97\xc9\xcc\x66\x3a\x93\x22\x09\x5a\x50\x83\xd2\x60\x1c\x10\xbc\x20\x9a\x0c\x1a\x0e\x36\xc9\xf0\x85\x39\xa0\x21\x0c\x18\xb2\xc1\xe9\xda\x50\x1d\x31\xe4\xe0\x9c\x37\x68\x50\x2b\xc9\xe0\x92\x32\x58\x68\x06\x30\xa8\xc1\x18\xcc\x70\x03\x1a\xdc\x80\x9e\x38\xa0\x41\x5f\xc2\x40\x83\x32\x38\xc9\x0c\xd1\xe9\x27\x38\x7f\x54\x06\x7d\xe2\x80\x0c\x36\xb0\x41\x0e\x36\xd2\x97\x19\xb8\x33\x07\x36\xa8\x90\x18\xc6\x80\x20\x05\x31\xc8\x2b\x76\xa8\x4e\x08\x12\x37\x94\x31\x50\x74\x9b\x18\x8d\x52\x9f\x0a\x54\x51\x69\x86\xb4\x35\x21\xf0\xe8\x86\xe4\x58\xd2\x8b\xba\x21\xa3\xad\x81\x91\x3f\x6d\x03\xd2\x97\x6a\xb4\x30\xa7\x71\x5f\x7a\xe6\x50\x9d\xa1\x70\x4e\xa7\x87\xe1\x69\x6b\x04\x37\x07\xa0\xba\x41\xa8\x20\x08\xc1\xc9\x42\xd4\x27\xa3\x22\x35\x04\x43\x41\x8f\xd8\x70\x56\xd4\xbd\xed\x54\x4b\x6d\xe8\x5c\x1e\x12\x47\x3e\xa7\x56\x47\x0f\xe4\x11\x8f\x57\x5b\x53\x1e\x03\x95\x61\xac\x49\xb5\xea\xff\x8c\x66\xd5\xa0\x6a\x14\x4b\x78\x40\xeb\x46\x19\x58\x07\xa3\xe9\x25\xaa\x6c\x78\x54\xd4\x36\x34\x36\x19\xd4\xc5\x05\x35\x90\x41\x0b\x66\xa0\x80\xbb\x12\x25\xaf\x64\xa9\x0e\x91\x64\xe4\x06\x1a\xb5\x80\x2d\x79\x88\xd8\x5e\x5a\x40\xa1\xd1\x64\x24\x06\x31\x70\x4e\x61\x8f\x7a\x58\xbd\x2a\xd6\x3e\x72\xa0\xac\x0b\x68\x30\xda\x1b\x50\x76\xb3\x78\xf5\x6c\x6b\xc2\x50\x87\x10\xd5\xd0\x0c\xa2\x55\x68\x0b\x84\x64\xd8\xc6\xa9\x16\x04\xac\xa5\x92\x5f\x9c\xc3\x9c\x1a\x9c\xb6\xb6\x88\x8d\x5a\x6e\xbc\x39\xdb\xd1\xce\x25\x06\x82\xb5\x0b\x70\x6f\x2b\x86\x19\x49\x8b\x0d\x73\x10\xad\x0c\x70\x30\x97\xc1\xa2\xb6\xb3\x89\x6d\x4d\x73\xe7\x60\xad\x19\xcc\x65\xb4\xbf\xe5\xac\x6d\xb3\x6b\x16\xb0\xc2\x41\xb0\x8a\xa1\x8b\x0d\xca\x74\xdd\xf1\x46\x6d\x0c\x61\x68\x81\x93\x54\x97\x06\xa2\xc1\x77\x2c\xd1\xad\xac\x2b\xe1\x69\xda\xe7\x2c\x97\xbc\xf0\x95\x2f\x58\xa4\x65\x5f\x49\xc9\x77\x43\x03\xa6\xac\x68\x68\x00\x03\x1c\xc8\x80\x06\xb3\x6d\x6f\x70\xa3\x14\xdf\xf9\x12\x98\x36\x06\x6e\xc3\x1b\xc0\x9a\xd7\xf8\x7a\x77\x25\xd6\xfd\xef\x7b\x2b\x3c\xe0\xfa\x62\x18\xbf\x2d\x68\xed\x82\xf2\x2b\x9a\xfd\xc2\xa0\xbf\x12\xbe\x2d\x9a\xc8\xa5\x62\xe8\xb6\x80\xba\xb3\xd4\xac\x88\xa3\x14\x96\xda\x9c\x4c\xb4\xca\x59\xaf\x7f\xc5\x3b\xe1\x98\xc6\x67\x6c\x37\x00\x2c\x69\x33\x3b\xe4\xd4\x92\x97\x0c\x62\x68\x81\x5c\xbc\x3b\xdd\x10\x13\xf9\xb6\x89\x33\x83\x19\x6a\x1c\x5d\xef\x0a\x39\xc6\xe4\x2d\x83\x0c\xcc\x30\x87\xf5\xbc\xe1\x0c\xd1\x55\x0c\x0d\xbc\x0b\xe1\x26\x63\x37\x6a\x4d\x83\x83\x58\xa4\xcb\x1c\x1d\x5f\x99\xbc\x7d\x61\x0b\x54\xe8\xc0\x5b\x19\x64\x56\xb9\x77\x8e\x1a\xd1\x1e\x25\x65\x17\x80\xd8\xcd\xee\xad\xce\xa0\xa5\x93\x87\xa1\xc8\x46\xc1\xa3\x99\xcb\x0c\xc2\xeb\x64\x41\xeb\x85\x0c\x5c\x2e\x2e\x72\x60\x40\xe9\x37\x2b\xfa\x51\x78\x88\x2d\x78\x11\x5d\xe4\xfa\xd1\x70\x68\x45\x13\x2d\x72\x0d\x6d\xe7\x4a\x2b\x9a\x5c\x5b\xea\x57\x72\x5d\x80\x83\x4e\x27\xba\x35\x91\xba\x83\xa7\x96\x0c\x5e\x40\xbb\x1a\xd7\x63\x68\x41\x92\x37\xdd\x6a\x4f\x03\x3b\xd8\x49\x56\x4c\x66\x09\xbb\xe3\x63\x9f\x8d\xaa\xc2\x66\x4e\x9d\x99\x1d\xe8\xcb\x41\xb9\x0d\xbc\x55\x49\xb1\x6f\x0d\x82\xd8\xd8\x87\x87\x2d\xa0\x4b\x0c\x94\x43\xdd\x3f\x83\x99\x91\x27\x9b\x75\x60\x59\x4d\xea\xdb\x36\x12\x67\xc1\xf6\x2b\x86\xa4\x7c\xee\xcb\x65\xb5\x4c\xd2\x46\x6f\xbd\x71\xdd\x58\x38\x9c\x41\xd5\x75\x59\xf6\xbe\xbb\xdd\x58\x3a\xd8\xd8\xbb\x72\xd1\x76\xbb\xc9\x7b\x06\x7f\xab\x86\xb7\xca\xe1\x34\xb5\x7f\xdd\xed\xb0\xc0\x01\x0d\x8a\xf3\xd7\x65\x14\xe3\xdd\x9a\x6c\xbb\xd4\xed\x69\xcb\x60\xab\xbb\x70\x46\x2a\x45\xcb\x7d\xf6\xeb\xa4\x49\xd3\xec\x6e\x5b\xd4\x5f\xf2\xae\xcb\xc7\xdd\x6d\x5e\xde\xd6\xda\xd7\xc6\x06\xc1\x37\xe5\x60\x86\x04\xe9\x41\x0f\xbc\x25\xed\x97\x5b\x9e\x06\x68\xc5\xf7\x50\x90\x76\xa5\x4c\xf4\x4d\x74\x29\x49\x59\x39\x4c\x1e\xf8\x1a\x1a\xa8\x94\x10\xf1\x96\x2e\x30\x6e\x39\x64\x33\xad\x98\x84\x73\xba\xe4\xd5\x59\x83\x1c\xc4\xe0\x5b\x65\x27\x7c\xe6\xe4\x7d\xd4\x1c\xa2\x4b\x03\x1c\x64\xbd\xda\xe2\x23\x52\x1a\x06\x33\xf2\x8e\xd3\xbb\xe5\x27\xd3\xcd\xe9\xa0\x25\x5a\xd2\x4e\x1a\xec\x71\xa7\x12\x6d\xbe\x00\xb6\xe8\x26\x59\xe8\x68\x8f\xda\xc9\xe0\x0b\x07\xe9\x96\x7d\xe0\x8b\x0f\x43\xe3\x27\x8b\x75\x5a\x27\x7e\x7a\x5a\x4e\xc3\xc8\xfd\x6a\x6e\xbc\xe3\x6c\x86\x63\x71\x43\xb0\x95\xcd\x6e\xc8\xe3\xec\x0c\x9b\x9b\x17\x9f\x15\x93\xe4\xb7\x53\xfc\x64\x0d\xff\x37\x58\x94\x12\x5a\xc5\xe4\x18\xf0\xf1\xa3\x8d\xc6\xbf\x9b\x83\xcb\x8b\x2f\x0d\x64\x70\x03\x6f\x4f\xe2\xfb\xf8\xad\x61\x0e\xb9\x19\x7e\xaf\x4d\x9f\x2d\x07\x35\xde\xaf\xa4\xdd\xc8\xdd\xe1\x1e\xbf\xac\x8e\xfe\xbb\x93\xc6\x39\xb7\x4f\xb6\x97\xfa\xdc\x07\xbd\x75\xb1\x3b\xee\x4f\xb6\x56\xde\x22\x47\x06\xbd\x1f\x3f\xce\xe0\x30\x87\xb1\x89\x3b\xc9\x9c\xd6\x7e\xa9\x4f\x36\x07\xdd\xf4\x35\xdf\x42\x56\xbf\x18\x76\xb3\xb9\x2d\x85\x9b\x39\xd4\x55\x03\x2b\x10\x03\x34\xb0\x02\x67\x70\x4e\x38\x90\x11\x2f\x51\x7c\xf4\x87\x6d\xb6\x27\x73\xf2\x77\x5b\xf4\xe7\x4d\xe0\x47\x5d\xf1\xc7\x7c\x73\xd0\x68\x63\xd1\x06\x66\x43\x19\x93\x96\x21\x9e\x27\x06\x44\x31\x07\x6e\x90\x59\x4b\xc6\x74\xd4\xb7\x54\xd4\x04\x07\xd7\x27\x6e\x56\xf6\x7a\x38\xc3\x54\xf7\x87\x78\x38\xc0\x7c\x75\x30\x1e\x3e\xf5\x1d\xff\xa7\x1c\xae\x97\x73\x27\xd3\x5a\xb2\xd1\x39\x60\x91\x6d\x2e\xb0\x5e\x11\x98\x76\x38\x53\x63\xcf\xd6\x58\xa1\xa6\x72\x17\x18\x82\x78\x80\x59\xe6\x07\x58\x0c\x68\x45\xac\x75\x75\x96\x77\x84\x8a\x67\x85\x77\x80\x85\x0a\xc7\x7c\x78\x30\x06\x51\xa6\x6c\x28\x08\x83\x39\x43\x06\x6d\x30\x06\x8d\x47\x7a\x65\xe8\x83\x56\x04\x6e\x1c\x57\x7a\x50\x68\x06\x7c\xa6\x72\x32\xa7\x7f\x78\x30\x75\x8b\x86\x85\xe9\x07\x86\x6d\x50\x07\x44\xd8\x86\xdb\x67\x45\x70\x80\x6d\x08\xc7\x1c\x82\x38\x7f\x56\x44\x2e\x1d\x33\x84\x74\x01\x75\x5f\x07\x86\xab\x27\x6d\x8f\xe7\x79\x4c\xd8\x02\x92\xa7\x79\x72\xd4\x47\x6c\xc7\x1c\x2e\x38\x7e\x7a\xd0\x66\x3a\xc0\x7a\x54\x88\x7b\x6d\xd0\x66\xc6\x15\x03\xb5\x66\x8a\xbb\x45\x5a\x9c\x67\x6b\xa5\x96\x55\x66\x10\x5a\x1d\x07\x58\x2e\x70\x5e\xc5\x27\x7a\xf1\xb1\x1b\xd1\xb5\x69\x2b\xa0\x5f\xf1\x74\x7b\x03\xf7\x15\xf6\x41\x68\x1f\x96\x8b\x9d\x83\x06\xbc\x55\x89\xd4\x27\x3c\x6b\x37\x36\xa4\x47\x17\xb0\x85\x7b\x70\x20\x85\x6b\xa0\x38\xff\x47\x19\x2e\xd0\x83\xdc\x26\x67\x31\xc3\x77\x72\x41\x17\x89\x78\x5b\xde\x28\x1e\x2d\x60\x2b\x72\x40\x7b\x32\x32\x14\x49\x07\x03\x34\x20\x8c\x2d\x27\x67\x0e\x68\x68\x24\x37\x70\xf2\x38\x5c\x30\x27\x1a\xf0\x94\x03\x55\x46\x8d\x62\x01\x23\xa2\x95\x64\xcc\x48\x71\x2c\x48\x2e\x37\x36\x5a\x91\x18\x8f\x60\x31\x36\x71\x43\x6c\xd4\xa8\x17\x5e\x41\x07\x72\x90\x07\x58\x98\x90\xd4\x67\x1a\xf2\x85\x6a\xff\x26\x8e\xca\x31\x8e\xe4\x45\x2e\x69\xc3\x58\xfe\x02\x7f\x73\x51\x21\xc5\xc7\x88\x6a\x62\x66\x56\x27\x6e\xca\xf6\x82\x39\xb7\x1b\x66\x13\x7d\xc5\xe7\x4d\x69\xf3\x31\xc5\x05\x61\x13\xf7\x92\x71\x20\x23\x63\x31\x72\xe3\x26\x87\xd4\x77\x3a\x1e\x63\x73\x75\x41\x17\xb8\x88\x7b\x44\x51\x7b\x75\xd1\x7b\x5a\x58\x1d\x63\x81\x07\x8f\xf3\x06\xf8\x96\x7d\x03\x47\x07\x7a\xe0\x20\x44\x91\x74\x63\x38\x70\x4a\xc8\x58\x8e\xe5\x84\xb0\x78\x5b\x77\x80\x71\x00\x29\x6f\x9d\x47\x7d\x78\xd0\x5c\x74\xa0\x16\xec\x47\x84\x02\xd7\x72\x61\x18\x65\x2a\x29\x95\x64\xe8\x92\xdc\xc6\x34\x3a\x33\x97\xd1\xe6\x5d\x16\x49\x71\x78\x50\x20\xff\xe6\x48\xd8\x48\x7a\x67\xe9\x97\x7a\x49\x92\x87\x36\x70\x78\x00\x74\x71\x03\x94\x14\xa7\x07\x3f\xb6\x71\x7f\x25\x85\xcf\xf1\x4c\x96\x79\x99\x98\x99\x99\x9a\xb9\x99\x9c\xd9\x99\x9e\xf9\x99\xa0\x19\x9a\xa2\x39\x9a\xa4\x59\x9a\xa6\x79\x9a\xa8\x99\x9a\xaa\xb9\x9a\xac\xd9\x9a\xae\xf9\x9a\xb0\x19\x9b\xb2\x39\x9b\xb4\x59\x9b\xb6\x79\x9b\xb8\x99\x9b\xba\xb9\x9b\xbc\xd9\x9b\xbe\xf9\x9b\xc0\x19\x9c\xc2\x39\x9c\xb6\x09")
)
func TestParsePackageArchiveName(t *testing.T) {
var tests = []struct {
Archive string
Name string
Version version.Version
Arch string
Ext string
}{
{"zsh-5.4.2-1-x86_64.pkg.tar.bz2", "zsh", version.Parse("5.4.2-1"), "x86_64", ".pkg.tar.bz2"},
{"pacman-mirrorlist-20170907-1-any.pkg.tar.xz", "pacman-mirrorlist", version.Parse("20170907-1"), "any", ".pkg.tar.xz"},
}
for _, test := range tests {
t.Run(test.Archive, func(t *testing.T) {
name, v, arch, ext, err := ParsePackageArchiveName(test.Archive)
if err != nil {
t.Fatal(err)
}
if name != test.Name {
t.Fatalf(`expected name %q, got %q`, test.Name, name)
}
if version.Compare(v, test.Version) != 0 {
t.Fatalf(`expected version %q, got %q`, test.Version, v)
}
if arch != test.Arch {
t.Fatalf(`expected arch %q, got %q`, test.Arch, arch)
}
if ext != test.Ext {
t.Fatalf(`expected ext %q, got %q`, test.Ext, ext)
}
})
}
}
func TestParsePackageArchiveNameError(t *testing.T) {
var tests = []string{
"zsh-5.4.2-1-x86_64.tar.bz2", // Wrong extension
"zsh-5.4.2-1.pkg.tar.bz2", // No arch
"zsh-5.4.2-x86_64.pkg.tar.bz2", // No release
"zsh-x86_64.pkg.tar.bz2", // No version
"zsh.pkg.tar.bz2", // No version nor arch
}
for _, test := range tests {
t.Run(test, func(t *testing.T) {
if _, _, _, _, err := ParsePackageArchiveName(test); err == nil {
t.Fatal(`wrong package name accepted`)
}
})
}
}
func TestParsePackageName(t *testing.T) {
var tests = []struct {
Package string
Name string
Version version.Version
}{
{"orc-0.4.26+2+g249c709-1", "orc", version.Parse("0.4.26+2+g249c709-1")},
{"openbsd-netcat-1.178_3-1", "openbsd-netcat", version.Parse("1.178_3-1")},
}
for _, test := range tests {
t.Run(test.Package, func(t *testing.T) {
name, v, err := ParsePackageName(test.Package)
if err != nil {
t.Fatal(err)
}
if name != test.Name {
t.Fatalf(`expected name %q, got %q`, test.Name, name)
}
if version.Compare(v, test.Version) != 0 {
t.Fatalf(`expected version %q, got %q`, test.Version, v)
}
})
}
}
func TestParsePackageNameError(t *testing.T) {
var tests = []string{
"orc-0.4.26+2+g249c709", // No release
"orc", // No version
}
for _, test := range tests {
t.Run(test, func(t *testing.T) {
if _, _, err := ParsePackageName(test); err == nil {
t.Fatal(`wrong package name accepted`)
}
})
}
}