forked from mirror/pkger
lost in the supermarket!
This commit is contained in:
parent
be03e3492e
commit
34a3aeb632
|
@ -2,10 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"compress/gzip"
|
|
||||||
"encoding/base64"
|
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
"github.com/markbates/pkger"
|
"github.com/markbates/pkger"
|
||||||
|
@ -39,19 +36,11 @@ func Package(out string, paths []pkger.Path) error {
|
||||||
os.RemoveAll(out)
|
os.RemoveAll(out)
|
||||||
|
|
||||||
bb := &bytes.Buffer{}
|
bb := &bytes.Buffer{}
|
||||||
gz := gzip.NewWriter(bb)
|
|
||||||
defer gz.Close()
|
|
||||||
|
|
||||||
if err := pkger.Pack(gz, paths); err != nil {
|
if err := pkger.Pack(bb, paths); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := gz.Close(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
s := base64.StdEncoding.EncodeToString(bb.Bytes())
|
|
||||||
|
|
||||||
c, err := pkger.Current()
|
c, err := pkger.Current()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -61,7 +50,7 @@ func Package(out string, paths []pkger.Path) error {
|
||||||
Data string
|
Data string
|
||||||
}{
|
}{
|
||||||
Pkg: c.Name,
|
Pkg: c.Name,
|
||||||
Data: strconv.Quote(s),
|
Data: bb.String(),
|
||||||
}
|
}
|
||||||
|
|
||||||
f, err := os.Create(out)
|
f, err := os.Create(out)
|
||||||
|
@ -80,9 +69,4 @@ func Package(out string, paths []pkger.Path) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
const outTmpl = `package {{.Pkg}}
|
const outTmpl = "package {{.Pkg}}\nimport \"github.com/markbates/pkger\"\nvar _ = pkger.Unpack(`{{.Data}}`) "
|
||||||
|
|
||||||
import "github.com/markbates/pkger"
|
|
||||||
|
|
||||||
var _ = pkger.Unpack({{.Data}})
|
|
||||||
`
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ func (m *filesMap) Data() *sync.Map {
|
||||||
func (m *filesMap) MarshalJSON() ([]byte, error) {
|
func (m *filesMap) MarshalJSON() ([]byte, error) {
|
||||||
var err error
|
var err error
|
||||||
mm := map[string]interface{}{}
|
mm := map[string]interface{}{}
|
||||||
m.data.Range(func(key, value interface{}) bool {
|
m.Data().Range(func(key, value interface{}) bool {
|
||||||
var b []byte
|
var b []byte
|
||||||
b, err = json.Marshal(key)
|
b, err = json.Marshal(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
5
index.go
5
index.go
|
@ -36,14 +36,13 @@ func (i *index) Info(p string) (here.Info, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *index) Current() (here.Info, error) {
|
func (i *index) Current() (here.Info, error) {
|
||||||
var err error
|
|
||||||
i.once.Do(func() {
|
i.once.Do(func() {
|
||||||
i.current, err = here.Cache("", func(string) (here.Info, error) {
|
i.current, _ = here.Cache("", func(string) (here.Info, error) {
|
||||||
return here.Current()
|
return here.Current()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
return i.current, err
|
return i.current, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *index) Create(pt Path) (*File, error) {
|
func (i *index) Create(pt Path) (*File, error) {
|
||||||
|
|
|
@ -101,4 +101,8 @@ func Test_index_JSON(t *testing.T) {
|
||||||
r.NotZero(i2.current)
|
r.NotZero(i2.current)
|
||||||
r.Equal(1, len(i2.Files.Keys()))
|
r.Equal(1, len(i2.Files.Keys()))
|
||||||
r.Equal(1, len(i2.Infos.Keys()))
|
r.Equal(1, len(i2.Infos.Keys()))
|
||||||
|
|
||||||
|
f2, err := i2.Open(Path{Name: "/radio.radio"})
|
||||||
|
r.NoError(err)
|
||||||
|
r.Equal(f.data, f2.data)
|
||||||
}
|
}
|
||||||
|
|
28
pkger.go
28
pkger.go
|
@ -3,8 +3,9 @@ package pkger
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"encoding/base64"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
)
|
)
|
||||||
|
@ -28,28 +29,34 @@ func Create(p string) (*File, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Unpack(ind string) error {
|
func Unpack(ind string) error {
|
||||||
b, err := base64.StdEncoding.DecodeString(ind)
|
b, err := hex.DecodeString(ind)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal("hex.DecodeString", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
gz, err := gzip.NewReader(bytes.NewReader(b))
|
gz, err := gzip.NewReader(bytes.NewReader(b))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal("gzip.NewReader", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer gz.Close()
|
defer gz.Close()
|
||||||
|
|
||||||
if err := json.NewDecoder(gz).Decode(rootIndex); err != nil {
|
if err := json.NewDecoder(gz).Decode(rootIndex); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal("json.NewDecoder", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println(rootIndex.Files.Keys())
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Pack(out io.Writer, paths []Path) error {
|
func Pack(out io.Writer, paths []Path) error {
|
||||||
|
bb := &bytes.Buffer{}
|
||||||
|
gz := gzip.NewWriter(bb)
|
||||||
|
defer gz.Close()
|
||||||
|
|
||||||
for _, p := range paths {
|
for _, p := range paths {
|
||||||
f, err := Open(p.String())
|
f, err := Open(p.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -65,5 +72,14 @@ func Pack(out io.Writer, paths []Path) error {
|
||||||
rootIndex.Files.Store(p, f)
|
rootIndex.Files.Store(p, f)
|
||||||
f.Close()
|
f.Close()
|
||||||
}
|
}
|
||||||
return json.NewEncoder(out).Encode(rootIndex)
|
|
||||||
|
if err := json.NewEncoder(gz).Encode(rootIndex); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := gz.Close(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
s := hex.EncodeToString(bb.Bytes())
|
||||||
|
fmt.Fprint(out, s)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue