mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-30 03:20:18 -06:00
Merge pull request #535 from aboodman/blob-future
Convert NewBlob() away from using resolvedFutures
This commit is contained in:
@@ -31,7 +31,7 @@ func addMp3(ds *dataset.Dataset, filename string) {
|
||||
}
|
||||
defer mp3_file.Close()
|
||||
|
||||
mp3_data, err := types.NewBlob(bufio.NewReader(mp3_file))
|
||||
mp3_data, err := types.NewBlob(bufio.NewReader(mp3_file), ds.Store())
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to read mp3 data from %s: %s\n", filename, err)
|
||||
}
|
||||
|
||||
@@ -317,7 +317,7 @@ func isNilPtrOrNilInterface(v reflect.Value) bool {
|
||||
|
||||
func readerEncoder(v reflect.Value) types.Value {
|
||||
d.Chk.True(v.Type().Implements(readerType))
|
||||
blob, err := types.NewBlob(v.Interface().(io.Reader))
|
||||
blob, err := types.NewMemoryBlob(v.Interface().(io.Reader))
|
||||
d.Exp.NoError(err, "Failed to marshal reader into blob")
|
||||
return blob
|
||||
}
|
||||
@@ -398,10 +398,10 @@ func newMapEncoder(t reflect.Type) encoderFunc {
|
||||
|
||||
func encodeByteSlice(v reflect.Value) types.Value {
|
||||
if v.IsNil() {
|
||||
nom, _ := types.NewBlob(&bytes.Buffer{})
|
||||
nom, _ := types.NewMemoryBlob(&bytes.Buffer{})
|
||||
return nom
|
||||
}
|
||||
nom, err := types.NewBlob(bytes.NewReader(v.Bytes()))
|
||||
nom, err := types.NewMemoryBlob(bytes.NewReader(v.Bytes()))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@@ -462,7 +462,7 @@ var pallValue = All{
|
||||
|
||||
// Used in creating canned marshaled values below.
|
||||
func makeNewBlob(b []byte) types.Blob {
|
||||
blob, err := types.NewBlob(bytes.NewBuffer(b))
|
||||
blob, err := types.NewMemoryBlob(bytes.NewBuffer(b))
|
||||
if err != nil {
|
||||
panic(err) // Sigh
|
||||
}
|
||||
|
||||
@@ -411,7 +411,7 @@ func byteSlice(b byte, times int) (out []byte) {
|
||||
}
|
||||
|
||||
func blob(b ...byte) types.Blob {
|
||||
blob, err := types.NewBlob(bytes.NewReader(b))
|
||||
blob, err := types.NewMemoryBlob(bytes.NewReader(b))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ func TestAccessors(t *testing.T) {
|
||||
assert.Equal("bye", st.String())
|
||||
|
||||
assert.True(st.Blob().Equals(types.NewEmptyBlob()))
|
||||
b, err := types.NewBlob(strings.NewReader("hello"))
|
||||
b, err := types.NewMemoryBlob(strings.NewReader("hello"))
|
||||
assert.NoError(err)
|
||||
st.SetBlob(b)
|
||||
assert.True(st.Blob().Equals(types.NewEmptyBlob()))
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"io"
|
||||
|
||||
"github.com/attic-labs/noms/Godeps/_workspace/src/github.com/attic-labs/buzhash"
|
||||
"github.com/attic-labs/noms/chunks"
|
||||
"github.com/attic-labs/noms/ref"
|
||||
)
|
||||
|
||||
@@ -31,7 +32,11 @@ func NewEmptyBlob() Blob {
|
||||
return newBlobLeaf([]byte{})
|
||||
}
|
||||
|
||||
func NewBlob(r io.Reader) (Blob, error) {
|
||||
func NewMemoryBlob(r io.Reader) (Blob, error) {
|
||||
return NewBlob(r, chunks.NewMemoryStore())
|
||||
}
|
||||
|
||||
func NewBlob(r io.Reader, cs chunks.ChunkStore) (Blob, error) {
|
||||
length := uint64(0)
|
||||
offsets := []uint64{}
|
||||
blobs := []Future{}
|
||||
@@ -51,7 +56,7 @@ func NewBlob(r io.Reader) (Blob, error) {
|
||||
length += n
|
||||
offsets = append(offsets, length)
|
||||
blob = newBlobLeaf(buf.Bytes())
|
||||
blobs = append(blobs, futureFromValue(blob))
|
||||
blobs = append(blobs, futureFromRef(WriteValue(blob, cs)))
|
||||
|
||||
if err == io.EOF {
|
||||
break
|
||||
@@ -66,7 +71,7 @@ func NewBlob(r io.Reader) (Blob, error) {
|
||||
return blob, nil
|
||||
}
|
||||
|
||||
co := compoundObject{offsets, blobs, &ref.Ref{}, nil}
|
||||
co := compoundObject{offsets, blobs, &ref.Ref{}, cs}
|
||||
co = splitCompoundObject(co, compoundObjectToBlobFuture)
|
||||
return compoundBlob{co}, nil
|
||||
}
|
||||
|
||||
@@ -20,21 +20,21 @@ func AssertSymNe(assert *assert.Assertions, a, b Value) {
|
||||
|
||||
func TestBlobLen(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
b, err := NewBlob(&bytes.Buffer{})
|
||||
b, err := NewMemoryBlob(&bytes.Buffer{})
|
||||
assert.NoError(err)
|
||||
assert.Equal(uint64(0), b.Len())
|
||||
b, err = NewBlob(bytes.NewBuffer([]byte{0x01}))
|
||||
b, err = NewMemoryBlob(bytes.NewBuffer([]byte{0x01}))
|
||||
assert.NoError(err)
|
||||
assert.Equal(uint64(1), b.Len())
|
||||
}
|
||||
|
||||
func TestBlobEquals(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
b1, _ := NewBlob(bytes.NewBuffer([]byte{0x01}))
|
||||
b1, _ := NewMemoryBlob(bytes.NewBuffer([]byte{0x01}))
|
||||
b11 := b1
|
||||
b12, _ := NewBlob(bytes.NewBuffer([]byte{0x01}))
|
||||
b2, _ := NewBlob(bytes.NewBuffer([]byte{0x02}))
|
||||
b3, _ := NewBlob(bytes.NewBuffer([]byte{0x02, 0x03}))
|
||||
b12, _ := NewMemoryBlob(bytes.NewBuffer([]byte{0x01}))
|
||||
b2, _ := NewMemoryBlob(bytes.NewBuffer([]byte{0x02}))
|
||||
b3, _ := NewMemoryBlob(bytes.NewBuffer([]byte{0x02, 0x03}))
|
||||
AssertSymEq(assert, b1, b11)
|
||||
AssertSymEq(assert, b1, b12)
|
||||
AssertSymNe(assert, b1, b2)
|
||||
@@ -72,7 +72,7 @@ func TestBlobFromReaderThatReturnsDataAndError(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
tr := &testReader{buf: &bytes.Buffer{}}
|
||||
|
||||
b, err := NewBlob(tr)
|
||||
b, err := NewMemoryBlob(tr)
|
||||
assert.NoError(err)
|
||||
|
||||
actual := &bytes.Buffer{}
|
||||
|
||||
@@ -17,13 +17,14 @@ func getTestCompoundBlob(datas ...string) compoundBlob {
|
||||
blobs := make([]Future, len(datas))
|
||||
offsets := make([]uint64, len(datas))
|
||||
length := uint64(0)
|
||||
ms := chunks.NewMemoryStore()
|
||||
for i, s := range datas {
|
||||
b, _ := NewBlob(bytes.NewBufferString(s))
|
||||
b, _ := NewBlob(bytes.NewBufferString(s), ms)
|
||||
blobs[i] = futureFromValue(b)
|
||||
length += uint64(len(s))
|
||||
offsets[i] = length
|
||||
}
|
||||
return newCompoundBlob(offsets, blobs, nil)
|
||||
return newCompoundBlob(offsets, blobs, ms)
|
||||
}
|
||||
|
||||
type randReader struct {
|
||||
@@ -53,7 +54,7 @@ func getRandomBlob(t *testing.T) compoundBlob {
|
||||
t.Skip("Skipping test in short mode.")
|
||||
}
|
||||
r := getRandomReader()
|
||||
b, err := NewBlob(r)
|
||||
b, err := NewMemoryBlob(r)
|
||||
assert.NoError(t, err)
|
||||
return b.(compoundBlob)
|
||||
}
|
||||
@@ -266,7 +267,7 @@ func TestCompoundBlobSameChunksWithPrefix(t *testing.T) {
|
||||
buf := bytes.NewBufferString("prefix")
|
||||
r := io.MultiReader(buf, rr)
|
||||
|
||||
b, err := NewBlob(r)
|
||||
b, err := NewMemoryBlob(r)
|
||||
assert.NoError(err)
|
||||
cb2 := b.(compoundBlob)
|
||||
|
||||
@@ -299,7 +300,7 @@ func TestCompoundBlobSameChunksWithSuffix(t *testing.T) {
|
||||
buf := bytes.NewBufferString("suffix")
|
||||
r := io.MultiReader(rr, buf)
|
||||
|
||||
b, err := NewBlob(r)
|
||||
b, err := NewMemoryBlob(r)
|
||||
assert.NoError(err)
|
||||
cb2 := b.(compoundBlob)
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package types
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
|
||||
"github.com/attic-labs/noms/chunks"
|
||||
@@ -97,9 +98,9 @@ func (r *jsonArrayReader) readTypeRefAsTag() TypeRef {
|
||||
func (r *jsonArrayReader) readBlob(t TypeRef) Value {
|
||||
s := r.readString()
|
||||
decoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(s))
|
||||
b, err := NewBlob(decoder)
|
||||
b, err := ioutil.ReadAll(decoder)
|
||||
d.Exp.NoError(err)
|
||||
return b
|
||||
return newBlobLeaf(b)
|
||||
}
|
||||
|
||||
func (r *jsonArrayReader) readList(t TypeRef, pkg *Package) Value {
|
||||
|
||||
@@ -83,7 +83,7 @@ func TestReadPrimitives(t *testing.T) {
|
||||
|
||||
test(NewString("hi"), `[%d, "hi"]`, StringKind)
|
||||
|
||||
blob, err := NewBlob(bytes.NewBuffer([]byte{0x00, 0x01}))
|
||||
blob, err := NewMemoryBlob(bytes.NewBuffer([]byte{0x00, 0x01}))
|
||||
assert.NoError(err)
|
||||
test(blob, `[%d, "AAE="]`, BlobKind)
|
||||
}
|
||||
@@ -528,7 +528,7 @@ func TestReadStructWithBlob(t *testing.T) {
|
||||
|
||||
v := r.readTopLevelValue().(Map)
|
||||
|
||||
blob, err := NewBlob(bytes.NewBuffer([]byte{0x00, 0x01}))
|
||||
blob, err := NewMemoryBlob(bytes.NewBuffer([]byte{0x00, 0x01}))
|
||||
assert.NoError(err)
|
||||
assert.True(v.Get(NewString("b")).Equals(blob))
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ func TestWritePrimitives(t *testing.T) {
|
||||
|
||||
f(StringKind, NewString("hi"), "hi")
|
||||
|
||||
blob, err := NewBlob(bytes.NewBuffer([]byte{0x00, 0x01}))
|
||||
blob, err := NewMemoryBlob(bytes.NewBuffer([]byte{0x00, 0x01}))
|
||||
assert.NoError(err)
|
||||
f(BlobKind, blob, "AAE=")
|
||||
}
|
||||
@@ -295,7 +295,7 @@ func TestWriteStructWithBlob(t *testing.T) {
|
||||
}, Choices{})}, []ref.Ref{})
|
||||
pkgRef := RegisterPackage(&pkg)
|
||||
tref := MakeTypeRef(pkgRef, 0)
|
||||
b, _ := NewBlob(bytes.NewBuffer([]byte{0x00, 0x01}))
|
||||
b, _ := NewMemoryBlob(bytes.NewBuffer([]byte{0x00, 0x01}))
|
||||
v := NewMap(NewString("b"), b)
|
||||
|
||||
w := newJsonArrayWriter(cs)
|
||||
@@ -351,7 +351,7 @@ func TestWriteListOfValue(t *testing.T) {
|
||||
cs := chunks.NewMemoryStore()
|
||||
|
||||
tref := MakeCompoundTypeRef(ListKind, MakePrimitiveTypeRef(ValueKind))
|
||||
blob, _ := NewBlob(bytes.NewBuffer([]byte{0x01}))
|
||||
blob, _ := NewMemoryBlob(bytes.NewBuffer([]byte{0x01}))
|
||||
v := NewList(
|
||||
Bool(true),
|
||||
UInt8(1),
|
||||
|
||||
@@ -44,20 +44,20 @@ func TestPrimitiveEquals(t *testing.T) {
|
||||
func() Value { return NewString("hi") },
|
||||
func() Value { return NewString("bye") },
|
||||
func() Value {
|
||||
v, _ := NewBlob(&bytes.Buffer{})
|
||||
v, _ := NewMemoryBlob(&bytes.Buffer{})
|
||||
return v
|
||||
},
|
||||
func() Value {
|
||||
v, _ := NewBlob(bytes.NewBufferString("hi"))
|
||||
v, _ := NewMemoryBlob(bytes.NewBufferString("hi"))
|
||||
return v
|
||||
},
|
||||
func() Value {
|
||||
v, _ := NewBlob(bytes.NewBufferString("bye"))
|
||||
v, _ := NewMemoryBlob(bytes.NewBufferString("bye"))
|
||||
return v
|
||||
},
|
||||
func() Value {
|
||||
b1, _ := NewBlob(bytes.NewBufferString("hi"))
|
||||
b2, _ := NewBlob(bytes.NewBufferString("bye"))
|
||||
b1, _ := NewMemoryBlob(bytes.NewBufferString("hi"))
|
||||
b2, _ := NewMemoryBlob(bytes.NewBufferString("bye"))
|
||||
return newCompoundBlob([]uint64{2, 5}, []Future{futureFromValue(b1), futureFromValue(b2)}, nil)
|
||||
},
|
||||
func() Value { return NewList() },
|
||||
|
||||
@@ -166,8 +166,8 @@ func TestMapEquals(t *testing.T) {
|
||||
|
||||
func TestMapNotStringKeys(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
b1, _ := NewBlob(bytes.NewBufferString("blob1"))
|
||||
b2, _ := NewBlob(bytes.NewBufferString("blob2"))
|
||||
b1, _ := NewMemoryBlob(bytes.NewBufferString("blob1"))
|
||||
b2, _ := NewMemoryBlob(bytes.NewBufferString("blob2"))
|
||||
l := []Value{
|
||||
Bool(true), NewString("true"),
|
||||
Bool(false), NewString("false"),
|
||||
|
||||
@@ -21,7 +21,7 @@ func TestReadValueBlobLeafDecode(t *testing.T) {
|
||||
|
||||
blobLeafDecode := func(r io.Reader) Value {
|
||||
i := decode(r)
|
||||
b, err := NewBlob(i.(io.Reader))
|
||||
b, err := NewMemoryBlob(i.(io.Reader))
|
||||
assert.NoError(err)
|
||||
return b
|
||||
}
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
"github.com/attic-labs/noms/ref"
|
||||
)
|
||||
import "github.com/attic-labs/noms/ref"
|
||||
|
||||
type String struct {
|
||||
s string
|
||||
@@ -15,10 +11,6 @@ func NewString(s string) String {
|
||||
return String{s, &ref.Ref{}}
|
||||
}
|
||||
|
||||
func (fs String) Blob() (Blob, error) {
|
||||
return NewBlob(bytes.NewBufferString(fs.s))
|
||||
}
|
||||
|
||||
func (fs String) String() string {
|
||||
return fs.s
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ func TestWriteValue(t *testing.T) {
|
||||
|
||||
// Encoding details for each codec is tested elsewhere.
|
||||
// Here we just want to make sure codecs are selected correctly.
|
||||
b, err := NewBlob(bytes.NewBuffer([]byte{0x00, 0x01, 0x02}))
|
||||
b, err := NewMemoryBlob(bytes.NewBuffer([]byte{0x00, 0x01, 0x02}))
|
||||
assert.NoError(err)
|
||||
testEncode(string([]byte{'b', ' ', 0x00, 0x01, 0x02}), b)
|
||||
|
||||
@@ -43,7 +43,7 @@ func TestWriteBlobLeaf(t *testing.T) {
|
||||
cs := chunks.NewMemoryStore()
|
||||
|
||||
buf := bytes.NewBuffer([]byte{})
|
||||
b1, err := NewBlob(buf)
|
||||
b1, err := NewMemoryBlob(buf)
|
||||
assert.NoError(err)
|
||||
bl1, ok := b1.(blobLeaf)
|
||||
assert.True(ok)
|
||||
@@ -52,7 +52,7 @@ func TestWriteBlobLeaf(t *testing.T) {
|
||||
assert.Equal("sha1-e1bc846440ec2fb557a5a271e785cd4c648883fa", r1.String())
|
||||
|
||||
buf = bytes.NewBufferString("Hello, World!")
|
||||
b2, err := NewBlob(buf)
|
||||
b2, err := NewMemoryBlob(buf)
|
||||
assert.NoError(err)
|
||||
bl2, ok := b2.(blobLeaf)
|
||||
assert.True(ok)
|
||||
|
||||
Reference in New Issue
Block a user