From e9ad659eb1867d54354c8c7819850b75978a6483 Mon Sep 17 00:00:00 2001 From: "Daniel A. Nagy" Date: Tue, 2 Jun 2015 12:22:50 +0200 Subject: [PATCH 1/3] bzzup shell script updated for compatibility with new resolver. --- bzz/bzzup/bzzup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bzz/bzzup/bzzup.sh b/bzz/bzzup/bzzup.sh index 52d07207e1..1593ff9b45 100755 --- a/bzz/bzzup/bzzup.sh +++ b/bzz/bzzup/bzzup.sh @@ -6,7 +6,7 @@ delimiter='{"entries":[{' if [ -f "$1" ]; then hash=`wget -q -O- --post-file="$1" http://localhost:8500/raw` -mime=`file --mime-type -b "$1"` +mime=`mimetype -b "$1"` wget -q -O- --post-data="$delimiter\"hash\":\"$hash\",\"contentType\":\"$mime\"}]}" http://localhost:8500/raw echo @@ -21,7 +21,7 @@ pushd "$bzzroot" > /dev/null (for path in `find . -type f` do -name=`echo "$path" | cut -c2-` +name=`echo "$path" | cut -c3-` [ _`basename "$name"` = "_$INDEX" ] && name=`dirname "$name"` echo -n "$delimiter" hash=`wget -q -O- --post-file="$path" http://localhost:8500/raw` From 69e7333e25437bf557e6ee4bbcc6ae64730db7e8 Mon Sep 17 00:00:00 2001 From: zsfelfoldi Date: Tue, 2 Jun 2015 13:15:43 +0200 Subject: [PATCH 2/3] Api.Upload supports single file uploads using mimetype command matching prefixes regardless of slashes --- bzz/api.go | 76 ++++++++++++++++++++++++++++++++----------------- bzz/manifest.go | 4 +-- 2 files changed, 52 insertions(+), 28 deletions(-) diff --git a/bzz/api.go b/bzz/api.go index f2a026ab9d..ca3346f079 100644 --- a/bzz/api.go +++ b/bzz/api.go @@ -160,35 +160,58 @@ const maxParallelFiles = 5 // TODO: localpath should point to a manifest func (self *Api) Upload(lpath string) (string, error) { var list []*manifestTrieEntry - localpath, err1 := filepath.Abs(filepath.Clean(lpath)) - if err1 != nil { - return "", err1 - } - start := len(localpath) - if (start > 0) && (localpath[start-1] != os.PathSeparator) { - start++ - } - dpaLogger.Debugf("uploading '%s'", localpath) - err := filepath.Walk(localpath, func(path string, info os.FileInfo, err error) error { - if (err == nil) && !info.IsDir() { - //fmt.Printf("lp %s path %s\n", localpath, path) - if len(path) <= start { - return fmt.Errorf("Path is too short") - } - if path[:len(localpath)] != localpath { - return fmt.Errorf("Path prefix of '%s' does not match localpath '%s'", path, localpath) - } - entry := &manifestTrieEntry{ - Path: path, - } - list = append(list, entry) - } - return err - }) + localpath, err := filepath.Abs(filepath.Clean(lpath)) if err != nil { return "", err } + f, err := os.Open(localpath) + if err != nil { + return "", err + } + stat, err := f.Stat() + if err != nil { + return "", err + } + + var start int + if stat.IsDir() { + start = len(localpath) + dpaLogger.Debugf("uploading '%s'", localpath) + err = filepath.Walk(localpath, func(path string, info os.FileInfo, err error) error { + if (err == nil) && !info.IsDir() { + //fmt.Printf("lp %s path %s\n", localpath, path) + if len(path) <= start { + return fmt.Errorf("Path is too short") + } + if path[:start] != localpath { + return fmt.Errorf("Path prefix of '%s' does not match localpath '%s'", path, localpath) + } + entry := &manifestTrieEntry{ + Path: path, + } + list = append(list, entry) + } + return err + }) + if err != nil { + return "", err + } + } else { + dir := filepath.Dir(localpath) + start = len(dir) + if len(localpath) <= start { + return "", fmt.Errorf("Path is too short") + } + if localpath[:start] != dir { + return "", fmt.Errorf("Path prefix of '%s' does not match dir '%s'", localpath, dir) + } + entry := &manifestTrieEntry{ + Path: localpath, + } + list = append(list, entry) + } + cnt := len(list) errors := make([]error, cnt) done := make(chan bool, maxParallelFiles) @@ -213,7 +236,8 @@ func (self *Api) Upload(lpath string) (string, error) { wg.Wait() } if err == nil { - cmd := exec.Command("file", "--mime-type", "-b", entry.Path) + //cmd := exec.Command("file", "--mime-type", "-b", entry.Path) + cmd := exec.Command("mimetype", "-b", entry.Path) var out bytes.Buffer cmd.Stdout = &out err = cmd.Run() diff --git a/bzz/manifest.go b/bzz/manifest.go index 7057386046..579ced1f23 100644 --- a/bzz/manifest.go +++ b/bzz/manifest.go @@ -262,8 +262,8 @@ func (self *manifestTrie) getEntry(spath string) (entry *manifestTrieEntry, full path := regularSlashes(spath) var pos int entry, pos = self.findPrefixOf(path) - if (pos > 0) && (pos < len(path)) && (path[pos] != '/') { + /*if (pos > 0) && (pos < len(path)) && (path[pos] != '/') { return nil, "" - } + }*/ return entry, path[:pos] } From bca8ec1bde1a33876b3ef175311fca1e59d1d069 Mon Sep 17 00:00:00 2001 From: zsfelfoldi Date: Tue, 2 Jun 2015 13:41:56 +0200 Subject: [PATCH 3/3] Api.Upload supports default index file --- bzz/api_test.go | 4 ++-- bzz/js_api.go | 15 +++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/bzz/api_test.go b/bzz/api_test.go index 5feb327afa..93f9b54224 100644 --- a/bzz/api_test.go +++ b/bzz/api_test.go @@ -73,7 +73,7 @@ func TestApiDirUpload(t *testing.T) { t.Errorf("unexpected error: %v", err) return } - bzzhash, err := api.Upload(path.Join(testDir, "test0")) + bzzhash, err := api.Upload(path.Join(testDir, "test0"), "") if err != nil { t.Errorf("unexpected error: %v", err) return @@ -101,7 +101,7 @@ func TestApiFileUpload(t *testing.T) { t.Errorf("unexpected error: %v", err) return } - bzzhash, err := api.Upload(path.Join(testDir, "test0", "index.html")) + bzzhash, err := api.Upload(path.Join(testDir, "test0", "index.html"), "") if err != nil { t.Errorf("unexpected error: %v", err) return diff --git a/bzz/js_api.go b/bzz/js_api.go index bd572ea40d..4bea187b06 100644 --- a/bzz/js_api.go +++ b/bzz/js_api.go @@ -182,12 +182,19 @@ func (self *JSApi) download(call otto.FunctionCall) otto.Value { } func (self *JSApi) upload(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) != 1 { - fmt.Println("requires 1 arguments: bzz.put(localpath)") + var err error + var index string + if len(call.ArgumentList) == 2 { + index, err = call.Argument(1).ToString() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + } else if len(call.ArgumentList) != 1 { + fmt.Println("requires 1 or 2 arguments: bzz.put(localpath[, index])") return otto.UndefinedValue() } - var err error var localpath, res string localpath, err = call.Argument(0).ToString() if err != nil { @@ -195,7 +202,7 @@ func (self *JSApi) upload(call otto.FunctionCall) otto.Value { return otto.UndefinedValue() } - res, err = self.api.Upload(localpath) + res, err = self.api.Upload(localpath, index) if err != nil { fmt.Println(err) return otto.UndefinedValue()