split out alpha pointer decoder
This commit is contained in:
parent
f72a2ebb14
commit
5b8924792a
@ -8,18 +8,23 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
MediaWarning = []byte("# git-media\n")
|
||||
alpha = "http://git-media.io/v/1"
|
||||
MediaWarning = []byte("# git-media\n")
|
||||
alpha = "http://git-media.io/v/1"
|
||||
latest = "http://git-media.io/v/2"
|
||||
oidType = "sha256"
|
||||
alphaHeaderRE = regexp.MustCompile(`\A# (.*git-media|external)`)
|
||||
linebreak = []byte("\n")
|
||||
)
|
||||
|
||||
type Pointer struct {
|
||||
Version string
|
||||
Oid string
|
||||
Size int64
|
||||
OidType string
|
||||
}
|
||||
|
||||
func NewPointer(oid string, size int64) *Pointer {
|
||||
return &Pointer{alpha, oid, size}
|
||||
return &Pointer{alpha, oid, size, oidType}
|
||||
}
|
||||
|
||||
func Encode(writer io.Writer, pointer *Pointer) (int, error) {
|
||||
@ -33,25 +38,27 @@ func Encode(writer io.Writer, pointer *Pointer) (int, error) {
|
||||
}
|
||||
|
||||
func Decode(reader io.Reader) (*Pointer, error) {
|
||||
buf := make([]byte, 100)
|
||||
buf := make([]byte, 200)
|
||||
written, err := reader.Read(buf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
lines := bytes.Split(buf[0:written], []byte("\n"))
|
||||
matched, err := regexp.Match("# (.*git-media|external)", lines[0])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
data := bytes.TrimSpace(buf[0:written])
|
||||
|
||||
if len(lines) < 2 {
|
||||
return nil, errors.New("No sha in meta file")
|
||||
if alphaHeaderRE.Match(data) {
|
||||
return decodeAlpha(data)
|
||||
} else {
|
||||
return nil, errors.New("No INI decoder yet")
|
||||
}
|
||||
|
||||
if matched {
|
||||
return &Pointer{alpha, string(lines[1]), 0}, nil
|
||||
}
|
||||
|
||||
return nil, errors.New("Could not decode meta file")
|
||||
}
|
||||
|
||||
func decodeAlpha(data []byte) (*Pointer, error) {
|
||||
lines := bytes.Split(data, linebreak)
|
||||
last := len(lines) - 1
|
||||
if last == 0 {
|
||||
return nil, errors.New("No sha in pointer file")
|
||||
}
|
||||
|
||||
return &Pointer{alpha, string(lines[last]), 0, oidType}, nil
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package metafile
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"github.com/bmizerany/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@ -32,6 +33,20 @@ func TestEncode(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestIniDecode(t *testing.T) {
|
||||
buf := bytes.NewBufferString(`[git-media]
|
||||
version="http://git-media.io/v/2"
|
||||
oid=sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
|
||||
size=12345
|
||||
`)
|
||||
|
||||
p, err := Decode(buf)
|
||||
assert.Equal(t, nil, err)
|
||||
assert.Equal(t, latest, p.Version)
|
||||
assert.Equal(t, "4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393", p.Oid)
|
||||
assert.Equal(t, int64(12345), p.Size)
|
||||
}
|
||||
|
||||
func TestAlphaDecode(t *testing.T) {
|
||||
buf := bytes.NewBufferString("# git-media\nabc\n")
|
||||
if pointer, _ := Decode(buf); pointer.Oid != "abc" {
|
||||
|
Loading…
Reference in New Issue
Block a user