mirror of
https://github.com/ipfs/kubo.git
synced 2025-09-10 14:34:24 +08:00
update to new flatfs code
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
This commit is contained in:
4
Godeps/Godeps.json
generated
4
Godeps/Godeps.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"ImportPath": "github.com/ipfs/go-ipfs",
|
"ImportPath": "github.com/ipfs/go-ipfs",
|
||||||
"GoVersion": "go1.5.1",
|
"GoVersion": "go1.5.2",
|
||||||
"Packages": [
|
"Packages": [
|
||||||
"./..."
|
"./..."
|
||||||
],
|
],
|
||||||
@ -166,7 +166,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/jbenet/go-datastore",
|
"ImportPath": "github.com/jbenet/go-datastore",
|
||||||
"Rev": "bec407bccea1cfaf56ee946e947642e3ac5a9258"
|
"Rev": "19e39c85262aa4c796b26346f3e1937711ffe2bf"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/jbenet/go-detect-race",
|
"ImportPath": "github.com/jbenet/go-detect-race",
|
||||||
|
68
Godeps/_workspace/src/github.com/jbenet/go-datastore/flatfs/flatfs.go
generated
vendored
68
Godeps/_workspace/src/github.com/jbenet/go-datastore/flatfs/flatfs.go
generated
vendored
@ -9,6 +9,7 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -314,52 +315,33 @@ func (fs *Datastore) Query(q query.Query) (query.Results, error) {
|
|||||||
return nil, errors.New("flatfs only supports listing all keys in random order")
|
return nil, errors.New("flatfs only supports listing all keys in random order")
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO this dumb implementation gathers all keys into a single slice.
|
reschan := make(chan query.Result)
|
||||||
root, err := os.Open(fs.path)
|
go func() {
|
||||||
if err != nil {
|
defer close(reschan)
|
||||||
return nil, err
|
err := filepath.Walk(fs.path, func(path string, info os.FileInfo, err error) error {
|
||||||
}
|
|
||||||
defer root.Close()
|
|
||||||
|
|
||||||
var res []query.Entry
|
if !info.Mode().IsRegular() || info.Name()[0] == '.' {
|
||||||
prefixes, err := root.Readdir(0)
|
return nil
|
||||||
if err != nil {
|
}
|
||||||
return nil, err
|
|
||||||
}
|
key, ok := fs.decode(info.Name())
|
||||||
for _, fi := range prefixes {
|
if !ok {
|
||||||
var err error
|
log.Warning("failed to decode entry in flatfs")
|
||||||
res, err = fs.enumerateKeys(fi, res)
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
reschan <- query.Result{
|
||||||
|
Entry: query.Entry{
|
||||||
|
Key: key.String(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
log.Warning("walk failed: ", err)
|
||||||
}
|
}
|
||||||
}
|
}()
|
||||||
return query.ResultsWithEntries(q, res), nil
|
return query.ResultsWithChan(q, reschan), nil
|
||||||
}
|
|
||||||
|
|
||||||
func (fs *Datastore) enumerateKeys(fi os.FileInfo, res []query.Entry) ([]query.Entry, error) {
|
|
||||||
if !fi.IsDir() || fi.Name()[0] == '.' {
|
|
||||||
return res, nil
|
|
||||||
}
|
|
||||||
child, err := os.Open(path.Join(fs.path, fi.Name()))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
defer child.Close()
|
|
||||||
objs, err := child.Readdir(0)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
for _, fi := range objs {
|
|
||||||
if !fi.Mode().IsRegular() || fi.Name()[0] == '.' {
|
|
||||||
return res, nil
|
|
||||||
}
|
|
||||||
key, ok := fs.decode(fi.Name())
|
|
||||||
if !ok {
|
|
||||||
return res, nil
|
|
||||||
}
|
|
||||||
res = append(res, query.Entry{Key: key.String()})
|
|
||||||
}
|
|
||||||
return res, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *Datastore) Close() error {
|
func (fs *Datastore) Close() error {
|
||||||
|
Reference in New Issue
Block a user