From fdcebc5a2001bc8d6709bc325e17c76ece334251 Mon Sep 17 00:00:00 2001
From: Juan Batiz-Benet <juan@benet.ai>
Date: Sat, 5 Jul 2014 15:03:37 -0700
Subject: [PATCH] importer

---
 importer/importer.go | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)
 create mode 100644 importer/importer.go

diff --git a/importer/importer.go b/importer/importer.go
new file mode 100644
index 000000000..e1eac1e1c
--- /dev/null
+++ b/importer/importer.go
@@ -0,0 +1,40 @@
+package importer
+
+import (
+	"fmt"
+	dag "github.com/jbenet/go-ipfs/merkledag"
+	"io"
+	"io/ioutil"
+)
+
+var BlockSizeLimit = int64(1048576) // 1 MB
+var SizeLimitExceeded = fmt.Errorf("object size limit exceeded")
+
+// todo: incremental construction with an ipfs node. dumping constructed
+// objects into the datastore, to avoid buffering all in memory
+
+// size required for block construction
+func NewDagFromReader(r io.Reader, size int64) (*dag.Node, error) {
+	// todo: block-splitting based on rabin fingerprinting
+	// todo: block-splitting with user-defined function
+	// todo: block-splitting at all. :P
+
+	// totally just trusts the reported size. fix later.
+	if size > BlockSizeLimit { // 1 MB limit for now.
+		return nil, SizeLimitExceeded
+	}
+
+	// we're doing it live!
+	buf, err := ioutil.ReadAll(r)
+	if err != nil {
+		return nil, err
+	}
+
+	if int64(len(buf)) > BlockSizeLimit {
+		return nil, SizeLimitExceeded // lying punk.
+	}
+
+	root := &dag.Node{Data: buf}
+	// no children for now because not block splitting yet
+	return root, nil
+}
-- 
GitLab