From 5b8924792a7504dfdfff3fadff73be76ef652280 Mon Sep 17 00:00:00 2001 From: Rick Olson Date: Thu, 24 Jul 2014 14:49:47 -0600 Subject: [PATCH] split out alpha pointer decoder --- metafile/metafile.go | 41 +++++++++++++++++++++++---------------- metafile/metafile_test.go | 15 ++++++++++++++ 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/metafile/metafile.go b/metafile/metafile.go index aff5ae17..263ba4cc 100644 --- a/metafile/metafile.go +++ b/metafile/metafile.go @@ -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 } diff --git a/metafile/metafile_test.go b/metafile/metafile_test.go index b2fc0c2c..49285cd7 100644 --- a/metafile/metafile_test.go +++ b/metafile/metafile_test.go @@ -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" {