mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-23 03:17:43 +08:00
Merge pull request #5661 from ipfs/gx/files2
Update for go-ipfs-files refactor
This commit is contained in:
commit
daa1202ee9
@ -12,7 +12,7 @@ import (
|
||||
"github.com/ipfs/go-ipfs/core"
|
||||
"github.com/ipfs/go-ipfs/core/coreunix"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
uio "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/io"
|
||||
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
|
||||
|
||||
// this import keeps gx from thinking the dep isn't used
|
||||
_ "gx/ipfs/QmdZ4PvPHFQVLLEve7DgoKDcSY19wwpGBB1GKjjKi2rEL1/dir-index-html"
|
||||
|
||||
@ -23,11 +23,11 @@ import (
|
||||
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
|
||||
migrate "github.com/ipfs/go-ipfs/repo/fsrepo/migrations"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
"gx/ipfs/QmQVUtnrNGtCRkCMpXgpApfzQjc8FDaDVxHqWH8cnZQeh5/go-multiaddr-net"
|
||||
ma "gx/ipfs/QmRKLtwMw131aK7ugC3G7ybpumMz78YrJe5dzneyindvG1/go-multiaddr"
|
||||
"gx/ipfs/QmTQuFQWHAWy4wMH6ZyPfGiawA5u9T8rs79FENoV8yXaoS/client_golang/prometheus"
|
||||
mprome "gx/ipfs/QmVMcMs6duiwLzvhF6xWM3yc4GgjpNoctKFhvtBch5tpgo/go-metrics-prometheus"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -16,8 +16,9 @@ import (
|
||||
namesys "github.com/ipfs/go-ipfs/namesys"
|
||||
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
|
||||
|
||||
"gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
"gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
"gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
@ -85,13 +86,20 @@ environment variable:
|
||||
|
||||
f := req.Files
|
||||
if f != nil {
|
||||
confFile, err := f.NextFile()
|
||||
if err != nil {
|
||||
return err
|
||||
it := req.Files.Entries()
|
||||
if !it.Next() {
|
||||
if it.Err() != nil {
|
||||
return it.Err()
|
||||
}
|
||||
return fmt.Errorf("file argument was nil")
|
||||
}
|
||||
file := files.FileFromEntry(it)
|
||||
if file == nil {
|
||||
return fmt.Errorf("expected a regular file")
|
||||
}
|
||||
|
||||
conf = &config.Config{}
|
||||
if err := json.NewDecoder(confFile).Decode(conf); err != nil {
|
||||
if err := json.NewDecoder(file).Decode(conf); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,7 +5,7 @@ import (
|
||||
|
||||
commands "github.com/ipfs/go-ipfs/core/commands"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
)
|
||||
|
||||
// This is the CLI root, used for executing commands accessible to CLI clients.
|
||||
|
||||
@ -25,15 +25,15 @@ import (
|
||||
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
|
||||
|
||||
u "gx/ipfs/QmNohiVssaPw3KVLZik59DBVGTSm2dGvYT9eoXt5DQ36Yz/go-ipfs-util"
|
||||
"gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
"gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds/cli"
|
||||
"gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds/http"
|
||||
loggables "gx/ipfs/QmQSREHX6CMoPkT5FfuA4A9cWSFwoKY8RAzjf5m7Gpdtqu/go-libp2p-loggables"
|
||||
manet "gx/ipfs/QmQVUtnrNGtCRkCMpXgpApfzQjc8FDaDVxHqWH8cnZQeh5/go-multiaddr-net"
|
||||
ma "gx/ipfs/QmRKLtwMw131aK7ugC3G7ybpumMz78YrJe5dzneyindvG1/go-multiaddr"
|
||||
madns "gx/ipfs/QmT4zgnKCyZBpRyxzsvZqUjzUkMWLJ2pZCw7uk6M6Kto5m/go-multiaddr-dns"
|
||||
osh "gx/ipfs/QmXuBJ7DR6k3rmUEKtvVMhwjmXDuJgXXPUt4LQXKBMsU93/go-os-helper"
|
||||
"gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds/cli"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds/http"
|
||||
logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log"
|
||||
)
|
||||
|
||||
|
||||
@ -11,8 +11,8 @@ import (
|
||||
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
loader "github.com/ipfs/go-ipfs/plugin/loader"
|
||||
|
||||
"gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
config "gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log"
|
||||
)
|
||||
|
||||
|
||||
@ -28,8 +28,8 @@ import (
|
||||
pstore "gx/ipfs/QmZ9zH2FnLcxv1xyzFeUpDUeo55xEhZQHgveZijcxr7TLj/go-libp2p-peerstore"
|
||||
pstoremem "gx/ipfs/QmZ9zH2FnLcxv1xyzFeUpDUeo55xEhZQHgveZijcxr7TLj/go-libp2p-peerstore/pstoremem"
|
||||
resolver "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path/resolver"
|
||||
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
uio "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/io"
|
||||
offroute "gx/ipfs/QmdmWkx54g7VfVyxeG8ic84uf4G6Eq1GohuyKA3XDuJ8oC/go-ipfs-routing/offline"
|
||||
metrics "gx/ipfs/QmekzFM3hPZjTjUFGTABdQkEnQ3PTiMstY198PwSFr5w1Q/go-metrics-interface"
|
||||
ds "gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore"
|
||||
|
||||
@ -9,7 +9,7 @@ import (
|
||||
|
||||
oldcmds "github.com/ipfs/go-ipfs/commands"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -6,13 +6,12 @@ import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
"github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
options "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
|
||||
"github.com/ipfs/go-ipfs/core/coreapi/interface/options"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
pb "gx/ipfs/QmPtj12fdwuAqj9sBSTNUxBNu8kCGNp8b3o8yUzMm5GHpq/pb"
|
||||
files "gx/ipfs/QmZMWMvWMVKCbHetJ4RgndbuEF1io2UpUxwQwtNjtYPzSC/go-ipfs-files"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
mh "gx/ipfs/QmerPMzPk1mJVowm8KgmoknWa4yCYvvugMPsgWmDNUvDLW/go-multihash"
|
||||
)
|
||||
@ -226,24 +225,17 @@ You can now check what blocks have been created by:
|
||||
outChan := make(chan interface{})
|
||||
req := res.Request()
|
||||
|
||||
sizeFile, ok := req.Files.(files.SizeFile)
|
||||
if ok {
|
||||
// Could be slow.
|
||||
go func() {
|
||||
size, err := sizeFile.Size()
|
||||
if err != nil {
|
||||
log.Warningf("error getting files size: %s", err)
|
||||
// see comment above
|
||||
return
|
||||
}
|
||||
// Could be slow.
|
||||
go func() {
|
||||
size, err := req.Files.Size()
|
||||
if err != nil {
|
||||
log.Warningf("error getting files size: %s", err)
|
||||
// see comment above
|
||||
return
|
||||
}
|
||||
|
||||
sizeChan <- size
|
||||
}()
|
||||
} else {
|
||||
// we don't need to error, the progress bar just
|
||||
// won't know how big the files are
|
||||
log.Warning("cannot determine size of input file")
|
||||
}
|
||||
sizeChan <- size
|
||||
}()
|
||||
|
||||
progressBar := func(wait chan struct{}) {
|
||||
defer close(wait)
|
||||
|
||||
@ -8,10 +8,10 @@ import (
|
||||
e "github.com/ipfs/go-ipfs/core/commands/e"
|
||||
|
||||
humanize "gx/ipfs/QmPSBJL4momYnE7DcUyk2DVhD6rH488ZmHBGLbxNdhU44K/go-humanize"
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
bitswap "gx/ipfs/QmUYXFM46WgGs5AScfL4FSZXa9p5nAhddueyM5auAVZGCQ/go-bitswap"
|
||||
decision "gx/ipfs/QmUYXFM46WgGs5AScfL4FSZXa9p5nAhddueyM5auAVZGCQ/go-bitswap/decision"
|
||||
peer "gx/ipfs/QmY5Grm8pJdiSSVsYxx4uNRgweY72EmYwuSDbRnbFok3iY/go-libp2p-peer"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cidutil "gx/ipfs/QmbfKu17LbMWyGUxHEUns9Wf5Dkm8PT6be4uPhTkk4YvaV/go-cidutil"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
@ -11,7 +11,7 @@ import (
|
||||
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
"github.com/ipfs/go-ipfs/core/coreapi/interface/options"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
mh "gx/ipfs/QmerPMzPk1mJVowm8KgmoknWa4yCYvvugMPsgWmDNUvDLW/go-multihash"
|
||||
)
|
||||
@ -153,7 +153,7 @@ than 'sha2-256' or format to anything other than 'v0' will result in CIDv1.
|
||||
return err
|
||||
}
|
||||
|
||||
file, err := req.Files.NextFile()
|
||||
file, err := cmdenv.GetFileArg(req.Files.Entries())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -9,8 +9,8 @@ import (
|
||||
repo "github.com/ipfs/go-ipfs/repo"
|
||||
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
config "gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -9,7 +9,8 @@ import (
|
||||
"github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
"github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
"gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
@ -122,13 +123,14 @@ func cat(ctx context.Context, api iface.CoreAPI, paths []string, offset int64, m
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
file, err := api.Unixfs().Get(ctx, fpath)
|
||||
f, err := api.Unixfs().Get(ctx, fpath)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
if file.IsDirectory() {
|
||||
return nil, 0, iface.ErrIsDir
|
||||
file, ok := f.(files.File)
|
||||
if !ok {
|
||||
return nil, 0, iface.ErrNotFile
|
||||
}
|
||||
|
||||
fsize, err := file.Size()
|
||||
|
||||
@ -7,9 +7,9 @@ import (
|
||||
"strings"
|
||||
"unicode"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
verifcid "gx/ipfs/QmYMQuypUbgsdNHmuCBSUJV6wdQVsBHRivNAp3efHJwZJD/go-verifcid"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cidutil "gx/ipfs/QmbfKu17LbMWyGUxHEUns9Wf5Dkm8PT6be4uPhTkk4YvaV/go-cidutil"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
mbase "gx/ipfs/QmekxXDhCxCJRNuzmHreuaT3BsuJcsjcXWNrtV9C8DRHtd/go-multibase"
|
||||
|
||||
@ -7,8 +7,8 @@ import (
|
||||
"github.com/ipfs/go-ipfs/core"
|
||||
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
config "gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
)
|
||||
|
||||
// GetNode extracts the node from the environment.
|
||||
|
||||
23
core/commands/cmdenv/file.go
Normal file
23
core/commands/cmdenv/file.go
Normal file
@ -0,0 +1,23 @@
|
||||
package cmdenv
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
files "gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
)
|
||||
|
||||
// GetFileArg returns the next file from the directory or an error
|
||||
func GetFileArg(it files.DirIterator) (files.File, error) {
|
||||
if !it.Next() {
|
||||
err := it.Err()
|
||||
if err == nil {
|
||||
err = fmt.Errorf("expected a file argument")
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
file := files.FileFromEntry(it)
|
||||
if file == nil {
|
||||
return nil, fmt.Errorf("file argument was nil")
|
||||
}
|
||||
return file, nil
|
||||
}
|
||||
@ -14,7 +14,7 @@ import (
|
||||
|
||||
e "github.com/ipfs/go-ipfs/core/commands/e"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
)
|
||||
|
||||
func collectPaths(prefix string, cmd *cmds.Command, out map[string]struct{}) {
|
||||
|
||||
@ -10,14 +10,14 @@ import (
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
repo "github.com/ipfs/go-ipfs/repo"
|
||||
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
|
||||
"github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
"github.com/ipfs/go-ipfs/repo"
|
||||
"github.com/ipfs/go-ipfs/repo/fsrepo"
|
||||
|
||||
"gx/ipfs/QmP2i47tnU23ijdshrZtuvrSkQPtf9HhsMb9fwGVe8owj2/jsondiff"
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
config "gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
"gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
// ConfigUpdateOutput is config profile apply command's output
|
||||
@ -280,7 +280,7 @@ can't be undone.
|
||||
}
|
||||
defer r.Close()
|
||||
|
||||
file, err := req.Files.NextFile()
|
||||
file, err := cmdenv.GetFileArg(req.Files.Entries())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -9,9 +9,10 @@ import (
|
||||
"github.com/ipfs/go-ipfs/core/coredag"
|
||||
"github.com/ipfs/go-ipfs/pin"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
files "gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
mh "gx/ipfs/QmerPMzPk1mJVowm8KgmoknWa4yCYvvugMPsgWmDNUvDLW/go-multihash"
|
||||
@ -92,15 +93,12 @@ into an object of the specified format.
|
||||
defer nd.Blockstore.PinLock().Unlock()
|
||||
}
|
||||
|
||||
for {
|
||||
file, err := req.Files.NextFile()
|
||||
if err == io.EOF {
|
||||
// Finished the list of files.
|
||||
break
|
||||
} else if err != nil {
|
||||
return err
|
||||
it := req.Files.Entries()
|
||||
for it.Next() {
|
||||
file := files.FileFromEntry(it)
|
||||
if file == nil {
|
||||
return fmt.Errorf("expected a regular file")
|
||||
}
|
||||
|
||||
nds, err := coredag.ParseInputs(ienc, format, file, mhType, -1)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -122,6 +120,9 @@ into an object of the specified format.
|
||||
return err
|
||||
}
|
||||
}
|
||||
if it.Err() != nil {
|
||||
return it.Err()
|
||||
}
|
||||
|
||||
if err := b.Commit(); err != nil {
|
||||
return err
|
||||
|
||||
@ -9,7 +9,6 @@ import (
|
||||
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
routing "gx/ipfs/QmRASJXJUFygM5qU4YrH7k7jD6S4Hg8nJmgqJ4bYJvLatd/go-libp2p-routing"
|
||||
notif "gx/ipfs/QmRASJXJUFygM5qU4YrH7k7jD6S4Hg8nJmgqJ4bYJvLatd/go-libp2p-routing/notifications"
|
||||
@ -17,6 +16,7 @@ import (
|
||||
peer "gx/ipfs/QmY5Grm8pJdiSSVsYxx4uNRgweY72EmYwuSDbRnbFok3iY/go-libp2p-peer"
|
||||
pstore "gx/ipfs/QmZ9zH2FnLcxv1xyzFeUpDUeo55xEhZQHgveZijcxr7TLj/go-libp2p-peerstore"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package commands
|
||||
|
||||
import (
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ import (
|
||||
namesys "github.com/ipfs/go-ipfs/namesys"
|
||||
nsopts "github.com/ipfs/go-ipfs/namesys/opts"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ import (
|
||||
|
||||
commands "github.com/ipfs/go-ipfs/commands"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -10,21 +10,21 @@ import (
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
core "github.com/ipfs/go-ipfs/core"
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
iface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
"github.com/ipfs/go-ipfs/core"
|
||||
"github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
"github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
|
||||
humanize "gx/ipfs/QmPSBJL4momYnE7DcUyk2DVhD6rH488ZmHBGLbxNdhU44K/go-humanize"
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
"gx/ipfs/QmPSBJL4momYnE7DcUyk2DVhD6rH488ZmHBGLbxNdhU44K/go-humanize"
|
||||
bservice "gx/ipfs/QmPoh3SrQzFBWtdGK6qmHDV4EanKR6kYPj4DD3J2NLoEmZ/go-blockservice"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
offline "gx/ipfs/QmYZwey1thDTynSrvd6qQkX24UpTka6TFhQ2v569UpoqxD/go-ipfs-exchange-offline"
|
||||
mfs "gx/ipfs/QmYnp3EVZqLjzm8NYigcB3aHqDLFmAVUvtaUdYb3nFDtK6/go-mfs"
|
||||
"gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
"gx/ipfs/QmU3iDRUrxyTYdV2j5MuWLFvP1k7w98vD66PLnNChgvUmZ/go-mfs"
|
||||
"gx/ipfs/QmYZwey1thDTynSrvd6qQkX24UpTka6TFhQ2v569UpoqxD/go-ipfs-exchange-offline"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
ft "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
mh "gx/ipfs/QmerPMzPk1mJVowm8KgmoknWa4yCYvvugMPsgWmDNUvDLW/go-multihash"
|
||||
)
|
||||
|
||||
@ -769,12 +769,11 @@ stat' on the file or any of its ancestors.
|
||||
return err
|
||||
}
|
||||
|
||||
input, err := req.Files.NextFile()
|
||||
var r io.Reader
|
||||
r, err = cmdenv.GetFileArg(req.Files.Entries())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var r io.Reader = input
|
||||
if countfound {
|
||||
r = io.LimitReader(r, int64(count))
|
||||
}
|
||||
|
||||
@ -10,8 +10,8 @@ import (
|
||||
e "github.com/ipfs/go-ipfs/core/commands/e"
|
||||
filestore "github.com/ipfs/go-ipfs/filestore"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -13,12 +13,12 @@ import (
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
e "github.com/ipfs/go-ipfs/core/commands/e"
|
||||
|
||||
"gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
"gx/ipfs/QmPtj12fdwuAqj9sBSTNUxBNu8kCGNp8b3o8yUzMm5GHpq/pb"
|
||||
tar "gx/ipfs/QmQine7gvHncNevKtG9QXxf3nXcwSj6aDDmMm52mHofEEp/tar-utils"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
uarchive "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/archive"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
uarchive "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/archive"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
)
|
||||
|
||||
func checkHelptextRecursive(t *testing.T, name []string, c *cmds.Command) {
|
||||
|
||||
@ -12,11 +12,11 @@ import (
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
|
||||
ic "gx/ipfs/QmNiJiXwWE3kRhZrC5ej3kSjWHm337pYfhjLGSCDNKJP2s/go-libp2p-crypto"
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
identify "gx/ipfs/QmRBaUEQEeFWywfrZJ64QgsmvcqgLSK3VbvGMR2NM2Edpf/go-libp2p/p2p/protocol/identify"
|
||||
kb "gx/ipfs/QmTS16dBXwdQJ67cGf1Z5DV4qZf94vSjBvJbDp158XpwhG/go-libp2p-kbucket"
|
||||
"gx/ipfs/QmY5Grm8pJdiSSVsYxx4uNRgweY72EmYwuSDbRnbFok3iY/go-libp2p-peer"
|
||||
pstore "gx/ipfs/QmZ9zH2FnLcxv1xyzFeUpDUeo55xEhZQHgveZijcxr7TLj/go-libp2p-peerstore"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ import (
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
options "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log"
|
||||
lwriter "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log/writer"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
|
||||
@ -9,15 +9,15 @@ import (
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
iface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
blockservice "gx/ipfs/QmPoh3SrQzFBWtdGK6qmHDV4EanKR6kYPj4DD3J2NLoEmZ/go-blockservice"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
offline "gx/ipfs/QmYZwey1thDTynSrvd6qQkX24UpTka6TFhQ2v569UpoqxD/go-ipfs-exchange-offline"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
unixfs "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
|
||||
unixfspb "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/pb"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
merkledag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
unixfs "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
uio "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/io"
|
||||
unixfspb "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/pb"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
package commands
|
||||
|
||||
import (
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -9,8 +9,8 @@ import (
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
nodeMount "github.com/ipfs/go-ipfs/fuse/node"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
config "gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ package commands
|
||||
import (
|
||||
"errors"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -11,8 +11,8 @@ import (
|
||||
options "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
|
||||
nsopts "github.com/ipfs/go-ipfs/namesys/opts"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
@ -6,8 +6,8 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
"gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
"gx/ipfs/QmY5Grm8pJdiSSVsYxx4uNRgweY72EmYwuSDbRnbFok3iY/go-libp2p-peer"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
"gx/ipfs/QmfARXVCzpwFXQdepAJZuqyNDgV9doEsMnVCo1ssmuSe1U/go-libp2p-record"
|
||||
)
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package name
|
||||
|
||||
import (
|
||||
"gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ import (
|
||||
iface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
options "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ import (
|
||||
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
"github.com/ipfs/go-ipfs/dagutils"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -8,15 +8,15 @@ import (
|
||||
"io/ioutil"
|
||||
"text/tabwriter"
|
||||
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
"github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
"github.com/ipfs/go-ipfs/core/coreapi/interface/options"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
"gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
type Node struct {
|
||||
@ -391,8 +391,8 @@ And then run:
|
||||
return err
|
||||
}
|
||||
|
||||
input, err := req.Files.NextFile()
|
||||
if err != nil && err != io.EOF {
|
||||
file, err := cmdenv.GetFileArg(req.Files.Entries())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -411,7 +411,7 @@ And then run:
|
||||
return err
|
||||
}
|
||||
|
||||
p, err := api.Object().Put(req.Context, input,
|
||||
p, err := api.Object().Put(req.Context, file,
|
||||
options.Object.DataType(datafieldenc),
|
||||
options.Object.InputEnc(inputenc),
|
||||
options.Object.Pin(dopin))
|
||||
|
||||
@ -4,12 +4,12 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
"github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
"github.com/ipfs/go-ipfs/core/coreapi/interface/options"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
var ObjectPatchCmd = &cmds.Command{
|
||||
@ -60,12 +60,12 @@ the limit will not be respected by the network.
|
||||
return err
|
||||
}
|
||||
|
||||
data, err := req.Files.NextFile()
|
||||
file, err := cmdenv.GetFileArg(req.Files.Entries())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
p, err := api.Object().AppendData(req.Context, root, data)
|
||||
p, err := api.Object().AppendData(req.Context, root, file)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -107,12 +107,12 @@ Example:
|
||||
return err
|
||||
}
|
||||
|
||||
data, err := req.Files.NextFile()
|
||||
file, err := cmdenv.GetFileArg(req.Files.Entries())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
p, err := api.Object().SetData(req.Context, root, data)
|
||||
p, err := api.Object().SetData(req.Context, root, file)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -14,12 +14,12 @@ import (
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
p2p "github.com/ipfs/go-ipfs/p2p"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
ma "gx/ipfs/QmRKLtwMw131aK7ugC3G7ybpumMz78YrJe5dzneyindvG1/go-multiaddr"
|
||||
ipfsaddr "gx/ipfs/QmSzEdVLaPMQGAKKGo4mKjsbWcfz6w8CoDjhRPxdk7xYdn/go-ipfs-addr"
|
||||
madns "gx/ipfs/QmT4zgnKCyZBpRyxzsvZqUjzUkMWLJ2pZCw7uk6M6Kto5m/go-multiaddr-dns"
|
||||
pstore "gx/ipfs/QmZ9zH2FnLcxv1xyzFeUpDUeo55xEhZQHgveZijcxr7TLj/go-libp2p-peerstore"
|
||||
protocol "gx/ipfs/QmZNkThpqfVXs9GNbexPrfBbXSLNYeKrE7jwFM2oqHbyqN/go-libp2p-protocol"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -15,11 +15,11 @@ import (
|
||||
corerepo "github.com/ipfs/go-ipfs/core/corerepo"
|
||||
pin "github.com/ipfs/go-ipfs/pin"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
bserv "gx/ipfs/QmPoh3SrQzFBWtdGK6qmHDV4EanKR6kYPj4DD3J2NLoEmZ/go-blockservice"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
"gx/ipfs/QmYMQuypUbgsdNHmuCBSUJV6wdQVsBHRivNAp3efHJwZJD/go-verifcid"
|
||||
offline "gx/ipfs/QmYZwey1thDTynSrvd6qQkX24UpTka6TFhQ2v569UpoqxD/go-ipfs-exchange-offline"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
@ -10,12 +10,12 @@ import (
|
||||
|
||||
"github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
ping "gx/ipfs/QmRBaUEQEeFWywfrZJ64QgsmvcqgLSK3VbvGMR2NM2Edpf/go-libp2p/p2p/protocol/ping"
|
||||
ma "gx/ipfs/QmRKLtwMw131aK7ugC3G7ybpumMz78YrJe5dzneyindvG1/go-multiaddr"
|
||||
iaddr "gx/ipfs/QmSzEdVLaPMQGAKKGo4mKjsbWcfz6w8CoDjhRPxdk7xYdn/go-ipfs-addr"
|
||||
"gx/ipfs/QmY5Grm8pJdiSSVsYxx4uNRgweY72EmYwuSDbRnbFok3iY/go-libp2p-peer"
|
||||
pstore "gx/ipfs/QmZ9zH2FnLcxv1xyzFeUpDUeo55xEhZQHgveZijcxr7TLj/go-libp2p-peerstore"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ import (
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
options "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -10,9 +10,9 @@ import (
|
||||
core "github.com/ipfs/go-ipfs/core"
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
@ -16,10 +16,10 @@ import (
|
||||
corerepo "github.com/ipfs/go-ipfs/core/corerepo"
|
||||
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
bstore "gx/ipfs/QmS2aqUZLJp8kF1ihE5rvDGE5LvmKDPnx32w9Z1BW9xLV5/go-ipfs-blockstore"
|
||||
config "gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ import (
|
||||
nsopts "github.com/ipfs/go-ipfs/namesys/opts"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ import (
|
||||
ocmd "github.com/ipfs/go-ipfs/core/commands/object"
|
||||
unixfs "github.com/ipfs/go-ipfs/core/commands/unixfs"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
@ -3,7 +3,7 @@ package commands
|
||||
import (
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -9,9 +9,9 @@ import (
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
|
||||
humanize "gx/ipfs/QmPSBJL4momYnE7DcUyk2DVhD6rH488ZmHBGLbxNdhU44K/go-humanize"
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
peer "gx/ipfs/QmY5Grm8pJdiSSVsYxx4uNRgweY72EmYwuSDbRnbFok3iY/go-libp2p-peer"
|
||||
protocol "gx/ipfs/QmZNkThpqfVXs9GNbexPrfBbXSLNYeKrE7jwFM2oqHbyqN/go-libp2p-protocol"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
metrics "gx/ipfs/QmbYN6UmTJn5UUQdi5CTsU86TXVBSrTcRk5UmyA36Qx2J6/go-libp2p-metrics"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
@ -12,7 +12,6 @@ import (
|
||||
repo "github.com/ipfs/go-ipfs/repo"
|
||||
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
inet "gx/ipfs/QmPtFaR7BWHLAjSwLh9kXcyrgTzDpuhcWLkx8ioa9RMYnx/go-libp2p-net"
|
||||
swarm "gx/ipfs/QmQdLXW5JTSsrVb3ZpnpbASRwyM8CcE4XcM5nPbN19dWLr/go-libp2p-swarm"
|
||||
ma "gx/ipfs/QmRKLtwMw131aK7ugC3G7ybpumMz78YrJe5dzneyindvG1/go-multiaddr"
|
||||
@ -21,6 +20,7 @@ import (
|
||||
peer "gx/ipfs/QmY5Grm8pJdiSSVsYxx4uNRgweY72EmYwuSDbRnbFok3iY/go-libp2p-peer"
|
||||
config "gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
pstore "gx/ipfs/QmZ9zH2FnLcxv1xyzFeUpDUeo55xEhZQHgveZijcxr7TLj/go-libp2p-peerstore"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -8,9 +8,9 @@ import (
|
||||
version "github.com/ipfs/go-ipfs"
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
manet "gx/ipfs/QmQVUtnrNGtCRkCMpXgpApfzQjc8FDaDVxHqWH8cnZQeh5/go-multiaddr-net"
|
||||
sysi "gx/ipfs/QmZRjKbHa6DenStpQJFiaPcEwkZqrx7TH6xTf342LDU3qM/go-sysinfo"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -4,15 +4,15 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
core "github.com/ipfs/go-ipfs/core"
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
"github.com/ipfs/go-ipfs/core"
|
||||
"github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
tar "github.com/ipfs/go-ipfs/tar"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
"gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
"gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
var TarCmd = &cmds.Command{
|
||||
@ -44,21 +44,21 @@ represent it.
|
||||
return err
|
||||
}
|
||||
|
||||
fi, err := req.Files.NextFile()
|
||||
it := req.Files.Entries()
|
||||
file, err := cmdenv.GetFileArg(it)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
node, err := tar.ImportTar(req.Context, fi, nd.DAG)
|
||||
node, err := tar.ImportTar(req.Context, file, nd.DAG)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
c := node.Cid()
|
||||
|
||||
fi.FileName()
|
||||
return cmds.EmitOnce(res, &coreiface.AddEvent{
|
||||
Name: fi.FileName(),
|
||||
Name: it.Name(),
|
||||
Hash: c.String(),
|
||||
})
|
||||
},
|
||||
|
||||
@ -9,9 +9,9 @@ import (
|
||||
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
|
||||
iface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
unixfs "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
merkledag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
unixfs "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package unixfs
|
||||
|
||||
import (
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -9,12 +9,12 @@ import (
|
||||
filestore "github.com/ipfs/go-ipfs/filestore"
|
||||
pin "github.com/ipfs/go-ipfs/pin"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
chunk "gx/ipfs/QmR4QQVkBZsZENRjYFVi8dEtPL3daZRNKk24m4r6WKJHNm/go-ipfs-chunker"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
balanced "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/importer/balanced"
|
||||
ihelper "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/importer/helpers"
|
||||
trickle "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/importer/trickle"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
balanced "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/importer/balanced"
|
||||
ihelper "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/importer/helpers"
|
||||
trickle "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/importer/trickle"
|
||||
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
mh "gx/ipfs/QmerPMzPk1mJVowm8KgmoknWa4yCYvvugMPsgWmDNUvDLW/go-multihash"
|
||||
)
|
||||
|
||||
@ -8,7 +8,7 @@ import (
|
||||
version "github.com/ipfs/go-ipfs"
|
||||
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
|
||||
)
|
||||
|
||||
|
||||
@ -50,6 +50,7 @@ import (
|
||||
goprocess "gx/ipfs/QmSF8fPo3jgVBAy8fpdjjYqgG87dkJgUprRBHRd2tmfgpP/goprocess"
|
||||
mamask "gx/ipfs/QmSMZwvs3n4GBikZ7hKzT17c3bk65FmyZo2JqtJ16swqCv/multiaddr-filter"
|
||||
quic "gx/ipfs/QmSvK3DvgynMo45orM88RQowdupvgdxs3fDyahQsKkmcUP/go-libp2p-quic-transport"
|
||||
mfs "gx/ipfs/QmU3iDRUrxyTYdV2j5MuWLFvP1k7w98vD66PLnNChgvUmZ/go-mfs"
|
||||
bitswap "gx/ipfs/QmUYXFM46WgGs5AScfL4FSZXa9p5nAhddueyM5auAVZGCQ/go-bitswap"
|
||||
bsnet "gx/ipfs/QmUYXFM46WgGs5AScfL4FSZXa9p5nAhddueyM5auAVZGCQ/go-bitswap/network"
|
||||
connmgr "gx/ipfs/QmWJBngogUPF87Xz788NotnwfYS1B5oanKew82zuMwUkQu/go-libp2p-connmgr"
|
||||
@ -59,18 +60,17 @@ import (
|
||||
pnet "gx/ipfs/QmY4Q5JC4vxLEi8EpVxJM4rcRryEVtH1zRKVTAm6BKV1pg/go-libp2p-pnet"
|
||||
peer "gx/ipfs/QmY5Grm8pJdiSSVsYxx4uNRgweY72EmYwuSDbRnbFok3iY/go-libp2p-peer"
|
||||
smux "gx/ipfs/QmY9JXR3FupnYAYJWK9aMr9bCpqWKcToQ1tz8DVGTrHpHw/go-stream-muxer"
|
||||
mfs "gx/ipfs/QmYnp3EVZqLjzm8NYigcB3aHqDLFmAVUvtaUdYb3nFDtK6/go-mfs"
|
||||
config "gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
pstore "gx/ipfs/QmZ9zH2FnLcxv1xyzFeUpDUeo55xEhZQHgveZijcxr7TLj/go-libp2p-peerstore"
|
||||
resolver "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path/resolver"
|
||||
mplex "gx/ipfs/QmZsejKNkeFSQe5TcmYXJ8iq6qPL1FpsP4eAA8j7RfE7xg/go-smux-multiplex"
|
||||
pubsub "gx/ipfs/QmaqGyUhWLsJbVo1QAujSu13mxNjFJ98Kt2VWGSnShGE1Q/go-libp2p-pubsub"
|
||||
metrics "gx/ipfs/QmbYN6UmTJn5UUQdi5CTsU86TXVBSrTcRk5UmyA36Qx2J6/go-libp2p-metrics"
|
||||
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log"
|
||||
autonat "gx/ipfs/QmdFdMoDmvuEJYsAKRA2BMobzNaeunmc16DqPxdHHfQ25K/go-libp2p-autonat-svc"
|
||||
merkledag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
ft "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
nilrouting "gx/ipfs/QmdmWkx54g7VfVyxeG8ic84uf4G6Eq1GohuyKA3XDuJ8oC/go-ipfs-routing/none"
|
||||
yamux "gx/ipfs/Qmdps3CYh5htGQSrPvzg5PHouVexLmtpbuLCqc4vuej8PC/go-smux-yamux"
|
||||
ds "gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore"
|
||||
|
||||
@ -4,5 +4,6 @@ import "errors"
|
||||
|
||||
var (
|
||||
ErrIsDir = errors.New("this dag node is a directory")
|
||||
ErrNotFile = errors.New("this dag node is not a regular file")
|
||||
ErrOffline = errors.New("this action must be run in online mode, try running 'ipfs daemon' first")
|
||||
)
|
||||
|
||||
@ -2,11 +2,10 @@ package iface
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
|
||||
options "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
|
||||
"github.com/ipfs/go-ipfs/core/coreapi/interface/options"
|
||||
|
||||
files "gx/ipfs/QmZMWMvWMVKCbHetJ4RgndbuEF1io2UpUxwQwtNjtYPzSC/go-ipfs-files"
|
||||
files "gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
)
|
||||
|
||||
@ -18,24 +17,19 @@ type AddEvent struct {
|
||||
Size string `json:",omitempty"`
|
||||
}
|
||||
|
||||
type UnixfsFile interface {
|
||||
files.SizeFile
|
||||
io.Seeker
|
||||
}
|
||||
|
||||
// UnixfsAPI is the basic interface to immutable files in IPFS
|
||||
// NOTE: This API is heavily WIP, things are guaranteed to break frequently
|
||||
type UnixfsAPI interface {
|
||||
// Add imports the data from the reader into merkledag file
|
||||
//
|
||||
// TODO: a long useful comment on how to use this for many different scenarios
|
||||
Add(context.Context, files.File, ...options.UnixfsAddOption) (ResolvedPath, error)
|
||||
Add(context.Context, files.Node, ...options.UnixfsAddOption) (ResolvedPath, error)
|
||||
|
||||
// Get returns a read-only handle to a file tree referenced by a path
|
||||
//
|
||||
// Note that some implementations of this API may apply the specified context
|
||||
// to operations performed on the returned file
|
||||
Get(context.Context, Path) (UnixfsFile, error)
|
||||
Get(context.Context, Path) (files.Node, error)
|
||||
|
||||
// Ls returns the list of links in a directory
|
||||
Ls(context.Context, Path) ([]*ipld.Link, error)
|
||||
|
||||
@ -4,14 +4,13 @@ import (
|
||||
"context"
|
||||
"github.com/ipfs/go-ipfs/core"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"math/rand"
|
||||
"path"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
files "gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
ipath "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
files "gx/ipfs/QmZMWMvWMVKCbHetJ4RgndbuEF1io2UpUxwQwtNjtYPzSC/go-ipfs-files"
|
||||
|
||||
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
opt "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
|
||||
@ -20,7 +19,7 @@ import (
|
||||
var rnd = rand.New(rand.NewSource(0x62796532303137))
|
||||
|
||||
func addTestObject(ctx context.Context, api coreiface.CoreAPI) (coreiface.Path, error) {
|
||||
return api.Unixfs().Add(ctx, files.NewReaderFile("", "", ioutil.NopCloser(&io.LimitedReader{R: rnd, N: 4092}), nil))
|
||||
return api.Unixfs().Add(ctx, files.NewReaderFile(&io.LimitedReader{R: rnd, N: 4092}))
|
||||
}
|
||||
|
||||
func appendPath(p coreiface.Path, sub string) coreiface.Path {
|
||||
|
||||
@ -17,9 +17,9 @@ import (
|
||||
"github.com/ipfs/go-ipfs/pin"
|
||||
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
ft "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
)
|
||||
|
||||
const inputLimit = 2 << 20
|
||||
|
||||
@ -11,8 +11,8 @@ import (
|
||||
"gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
ipfspath "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
"gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path/resolver"
|
||||
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
uio "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/io"
|
||||
)
|
||||
|
||||
// ResolveNode resolves the path `p` using Unixfs resolver, gets and returns the
|
||||
|
||||
@ -3,18 +3,12 @@ package coreapi
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"io"
|
||||
"os"
|
||||
gopath "path"
|
||||
"time"
|
||||
|
||||
"github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
|
||||
files "gx/ipfs/QmZMWMvWMVKCbHetJ4RgndbuEF1io2UpUxwQwtNjtYPzSC/go-ipfs-files"
|
||||
files "gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
ft "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
uio "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/io"
|
||||
)
|
||||
|
||||
// Number to file to prefetch in directories
|
||||
@ -23,152 +17,134 @@ const prefetchFiles = 4
|
||||
|
||||
// TODO: this probably belongs in go-unixfs (and could probably replace a chunk of it's interface in the long run)
|
||||
|
||||
type sizeInfo struct {
|
||||
size int64
|
||||
name string
|
||||
modTime time.Time
|
||||
}
|
||||
|
||||
func (s *sizeInfo) Name() string {
|
||||
return s.name
|
||||
}
|
||||
|
||||
func (s *sizeInfo) Size() int64 {
|
||||
return s.size
|
||||
}
|
||||
|
||||
func (s *sizeInfo) Mode() os.FileMode {
|
||||
return 0444 // all read
|
||||
}
|
||||
|
||||
func (s *sizeInfo) ModTime() time.Time {
|
||||
return s.modTime
|
||||
}
|
||||
|
||||
func (s *sizeInfo) IsDir() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (s *sizeInfo) Sys() interface{} {
|
||||
return nil
|
||||
}
|
||||
|
||||
type ufsDirectory struct {
|
||||
ctx context.Context
|
||||
dserv ipld.DAGService
|
||||
dir uio.Directory
|
||||
}
|
||||
|
||||
type ufsIterator struct {
|
||||
ctx context.Context
|
||||
files chan *ipld.Link
|
||||
dserv ipld.DAGService
|
||||
|
||||
name string
|
||||
path string
|
||||
curName string
|
||||
curFile files.Node
|
||||
|
||||
err error
|
||||
errCh chan error
|
||||
}
|
||||
|
||||
func (it *ufsIterator) Name() string {
|
||||
return it.curName
|
||||
}
|
||||
|
||||
func (it *ufsIterator) Node() files.Node {
|
||||
return it.curFile
|
||||
}
|
||||
|
||||
func (it *ufsIterator) Next() bool {
|
||||
if it.err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
var l *ipld.Link
|
||||
var ok bool
|
||||
for !ok {
|
||||
if it.files == nil && it.errCh == nil {
|
||||
return false
|
||||
}
|
||||
select {
|
||||
case l, ok = <-it.files:
|
||||
if !ok {
|
||||
it.files = nil
|
||||
}
|
||||
case err := <-it.errCh:
|
||||
it.errCh = nil
|
||||
it.err = err
|
||||
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
it.curFile = nil
|
||||
|
||||
nd, err := l.GetNode(it.ctx, it.dserv)
|
||||
if err != nil {
|
||||
it.err = err
|
||||
return false
|
||||
}
|
||||
|
||||
it.curName = l.Name
|
||||
it.curFile, it.err = newUnixfsFile(it.ctx, it.dserv, nd)
|
||||
return it.err == nil
|
||||
}
|
||||
|
||||
func (it *ufsIterator) Err() error {
|
||||
return it.err
|
||||
}
|
||||
|
||||
func (d *ufsDirectory) Close() error {
|
||||
return files.ErrNotReader
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *ufsDirectory) Read(_ []byte) (int, error) {
|
||||
return 0, files.ErrNotReader
|
||||
}
|
||||
func (d *ufsDirectory) Entries() files.DirIterator {
|
||||
fileCh := make(chan *ipld.Link, prefetchFiles)
|
||||
errCh := make(chan error, 1)
|
||||
go func() {
|
||||
errCh <- d.dir.ForEachLink(d.ctx, func(link *ipld.Link) error {
|
||||
if d.ctx.Err() != nil {
|
||||
return d.ctx.Err()
|
||||
}
|
||||
select {
|
||||
case fileCh <- link:
|
||||
case <-d.ctx.Done():
|
||||
return d.ctx.Err()
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
func (d *ufsDirectory) FileName() string {
|
||||
return d.name
|
||||
}
|
||||
close(errCh)
|
||||
close(fileCh)
|
||||
}()
|
||||
|
||||
func (d *ufsDirectory) FullPath() string {
|
||||
return d.path
|
||||
}
|
||||
|
||||
func (d *ufsDirectory) IsDirectory() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (d *ufsDirectory) NextFile() (files.File, error) {
|
||||
l, ok := <-d.files
|
||||
if !ok {
|
||||
return nil, io.EOF
|
||||
return &ufsIterator{
|
||||
ctx: d.ctx,
|
||||
files: fileCh,
|
||||
errCh: errCh,
|
||||
dserv: d.dserv,
|
||||
}
|
||||
|
||||
nd, err := l.GetNode(d.ctx, d.dserv)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return newUnixfsFile(d.ctx, d.dserv, nd, l.Name, d)
|
||||
}
|
||||
|
||||
func (d *ufsDirectory) Size() (int64, error) {
|
||||
return 0, files.ErrNotReader
|
||||
}
|
||||
|
||||
func (d *ufsDirectory) Seek(offset int64, whence int) (int64, error) {
|
||||
return 0, files.ErrNotReader
|
||||
return 0, files.ErrNotSupported
|
||||
}
|
||||
|
||||
type ufsFile struct {
|
||||
uio.DagReader
|
||||
|
||||
name string
|
||||
path string
|
||||
}
|
||||
|
||||
func (f *ufsFile) IsDirectory() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (f *ufsFile) NextFile() (files.File, error) {
|
||||
return nil, files.ErrNotDirectory
|
||||
}
|
||||
|
||||
func (f *ufsFile) FileName() string {
|
||||
return f.name
|
||||
}
|
||||
|
||||
func (f *ufsFile) FullPath() string {
|
||||
return f.path
|
||||
}
|
||||
|
||||
func (f *ufsFile) Size() (int64, error) {
|
||||
return int64(f.DagReader.Size()), nil
|
||||
}
|
||||
|
||||
func newUnixfsDir(ctx context.Context, dserv ipld.DAGService, nd ipld.Node, name string, path string) (iface.UnixfsFile, error) {
|
||||
func newUnixfsDir(ctx context.Context, dserv ipld.DAGService, nd ipld.Node) (files.Directory, error) {
|
||||
dir, err := uio.NewDirectoryFromNode(dserv, nd)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
fileCh := make(chan *ipld.Link, prefetchFiles)
|
||||
go func() {
|
||||
dir.ForEachLink(ctx, func(link *ipld.Link) error {
|
||||
select {
|
||||
case fileCh <- link:
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
close(fileCh)
|
||||
}()
|
||||
|
||||
return &ufsDirectory{
|
||||
ctx: ctx,
|
||||
dserv: dserv,
|
||||
|
||||
files: fileCh,
|
||||
|
||||
name: name,
|
||||
path: path,
|
||||
dir: dir,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func newUnixfsFile(ctx context.Context, dserv ipld.DAGService, nd ipld.Node, name string, parent files.File) (iface.UnixfsFile, error) {
|
||||
path := name
|
||||
if parent != nil {
|
||||
path = gopath.Join(parent.FullPath(), name)
|
||||
}
|
||||
|
||||
func newUnixfsFile(ctx context.Context, dserv ipld.DAGService, nd ipld.Node) (files.Node, error) {
|
||||
switch dn := nd.(type) {
|
||||
case *dag.ProtoNode:
|
||||
fsn, err := ft.FSNodeFromBytes(dn.Data())
|
||||
@ -176,7 +152,7 @@ func newUnixfsFile(ctx context.Context, dserv ipld.DAGService, nd ipld.Node, nam
|
||||
return nil, err
|
||||
}
|
||||
if fsn.IsDir() {
|
||||
return newUnixfsDir(ctx, dserv, nd, name, path)
|
||||
return newUnixfsDir(ctx, dserv, nd)
|
||||
}
|
||||
|
||||
case *dag.RawNode:
|
||||
@ -191,10 +167,8 @@ func newUnixfsFile(ctx context.Context, dserv ipld.DAGService, nd ipld.Node, nam
|
||||
|
||||
return &ufsFile{
|
||||
DagReader: dr,
|
||||
|
||||
name: name,
|
||||
path: path,
|
||||
}, nil
|
||||
}
|
||||
|
||||
var _ os.FileInfo = &sizeInfo{}
|
||||
var _ files.Directory = &ufsDirectory{}
|
||||
var _ files.File = &ufsFile{}
|
||||
|
||||
@ -13,22 +13,22 @@ import (
|
||||
|
||||
blockservice "gx/ipfs/QmPoh3SrQzFBWtdGK6qmHDV4EanKR6kYPj4DD3J2NLoEmZ/go-blockservice"
|
||||
bstore "gx/ipfs/QmS2aqUZLJp8kF1ihE5rvDGE5LvmKDPnx32w9Z1BW9xLV5/go-ipfs-blockstore"
|
||||
mfs "gx/ipfs/QmU3iDRUrxyTYdV2j5MuWLFvP1k7w98vD66PLnNChgvUmZ/go-mfs"
|
||||
files "gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
offline "gx/ipfs/QmYZwey1thDTynSrvd6qQkX24UpTka6TFhQ2v569UpoqxD/go-ipfs-exchange-offline"
|
||||
mfs "gx/ipfs/QmYnp3EVZqLjzm8NYigcB3aHqDLFmAVUvtaUdYb3nFDtK6/go-mfs"
|
||||
files "gx/ipfs/QmZMWMvWMVKCbHetJ4RgndbuEF1io2UpUxwQwtNjtYPzSC/go-ipfs-files"
|
||||
cidutil "gx/ipfs/QmbfKu17LbMWyGUxHEUns9Wf5Dkm8PT6be4uPhTkk4YvaV/go-cidutil"
|
||||
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
dagtest "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag/test"
|
||||
ft "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
uio "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/io"
|
||||
)
|
||||
|
||||
type UnixfsAPI CoreAPI
|
||||
|
||||
// Add builds a merkledag node from a reader, adds it to the blockstore,
|
||||
// and returns the key representing that node.
|
||||
func (api *UnixfsAPI) Add(ctx context.Context, files files.File, opts ...options.UnixfsAddOption) (coreiface.ResolvedPath, error) {
|
||||
func (api *UnixfsAPI) Add(ctx context.Context, files files.Node, opts ...options.UnixfsAddOption) (coreiface.ResolvedPath, error) {
|
||||
settings, prefix, err := options.UnixfsAddOptions(opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -133,7 +133,7 @@ func (api *UnixfsAPI) Add(ctx context.Context, files files.File, opts ...options
|
||||
return coreiface.IpfsPath(nd.Cid()), nil
|
||||
}
|
||||
|
||||
func (api *UnixfsAPI) Get(ctx context.Context, p coreiface.Path) (coreiface.UnixfsFile, error) {
|
||||
func (api *UnixfsAPI) Get(ctx context.Context, p coreiface.Path) (files.Node, error) {
|
||||
ses := api.core().getSession(ctx)
|
||||
|
||||
nd, err := ses.ResolveNode(ctx, p)
|
||||
@ -141,7 +141,7 @@ func (api *UnixfsAPI) Get(ctx context.Context, p coreiface.Path) (coreiface.Unix
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return newUnixfsFile(ctx, ses.dag, nd, "", nil)
|
||||
return newUnixfsFile(ctx, ses.dag, nd)
|
||||
}
|
||||
|
||||
// Ls returns the contents of an IPFS or IPNS object(s) at path p, with the format:
|
||||
|
||||
@ -26,12 +26,12 @@ import (
|
||||
ci "gx/ipfs/QmNiJiXwWE3kRhZrC5ej3kSjWHm337pYfhjLGSCDNKJP2s/go-libp2p-crypto"
|
||||
mocknet "gx/ipfs/QmRBaUEQEeFWywfrZJ64QgsmvcqgLSK3VbvGMR2NM2Edpf/go-libp2p/p2p/net/mock"
|
||||
cbor "gx/ipfs/QmRoARq3nkUb13HSKZGepCZSWe5GrVPwx7xURJGZ7KWv9V/go-ipld-cbor"
|
||||
files "gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
peer "gx/ipfs/QmY5Grm8pJdiSSVsYxx4uNRgweY72EmYwuSDbRnbFok3iY/go-libp2p-peer"
|
||||
config "gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
pstore "gx/ipfs/QmZ9zH2FnLcxv1xyzFeUpDUeo55xEhZQHgveZijcxr7TLj/go-libp2p-peerstore"
|
||||
files "gx/ipfs/QmZMWMvWMVKCbHetJ4RgndbuEF1io2UpUxwQwtNjtYPzSC/go-ipfs-files"
|
||||
unixfs "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
mdag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
unixfs "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
mh "gx/ipfs/QmerPMzPk1mJVowm8KgmoknWa4yCYvvugMPsgWmDNUvDLW/go-multihash"
|
||||
datastore "gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore"
|
||||
syncds "gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore/sync"
|
||||
@ -134,35 +134,38 @@ func makeAPI(ctx context.Context) (*core.IpfsNode, coreiface.CoreAPI, error) {
|
||||
return nd[0], api[0], nil
|
||||
}
|
||||
|
||||
func strFile(data string) func() files.File {
|
||||
return func() files.File {
|
||||
return files.NewReaderFile("", "", ioutil.NopCloser(strings.NewReader(data)), nil)
|
||||
func strFile(data string) func() files.Node {
|
||||
return func() files.Node {
|
||||
return files.NewBytesFile([]byte(data))
|
||||
}
|
||||
}
|
||||
|
||||
func twoLevelDir() func() files.File {
|
||||
return func() files.File {
|
||||
return files.NewSliceFile("t", "t", []files.File{
|
||||
files.NewSliceFile("t/abc", "t/abc", []files.File{
|
||||
files.NewReaderFile("t/abc/def", "t/abc/def", ioutil.NopCloser(strings.NewReader("world")), nil),
|
||||
func twoLevelDir() func() files.Node {
|
||||
return func() files.Node {
|
||||
return files.NewMapDirectory(map[string]files.Node{
|
||||
"abc": files.NewMapDirectory(map[string]files.Node{
|
||||
"def": files.NewBytesFile([]byte("world")),
|
||||
}),
|
||||
files.NewReaderFile("t/bar", "t/bar", ioutil.NopCloser(strings.NewReader("hello2")), nil),
|
||||
files.NewReaderFile("t/foo", "t/foo", ioutil.NopCloser(strings.NewReader("hello1")), nil),
|
||||
|
||||
"bar": files.NewBytesFile([]byte("hello2")),
|
||||
"foo": files.NewBytesFile([]byte("hello1")),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func flatDir() files.File {
|
||||
return files.NewSliceFile("t", "t", []files.File{
|
||||
files.NewReaderFile("t/bar", "t/bar", ioutil.NopCloser(strings.NewReader("hello2")), nil),
|
||||
files.NewReaderFile("t/foo", "t/foo", ioutil.NopCloser(strings.NewReader("hello1")), nil),
|
||||
func flatDir() files.Node {
|
||||
return files.NewMapDirectory(map[string]files.Node{
|
||||
"bar": files.NewBytesFile([]byte("hello2")),
|
||||
"foo": files.NewBytesFile([]byte("hello1")),
|
||||
})
|
||||
}
|
||||
|
||||
func wrapped(f files.File) files.File {
|
||||
return files.NewSliceFile("", "", []files.File{
|
||||
f,
|
||||
})
|
||||
func wrapped(name string) func(f files.Node) files.Node {
|
||||
return func(f files.Node) files.Node {
|
||||
return files.NewMapDirectory(map[string]files.Node{
|
||||
name: f,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAdd(t *testing.T) {
|
||||
@ -174,13 +177,13 @@ func TestAdd(t *testing.T) {
|
||||
|
||||
cases := []struct {
|
||||
name string
|
||||
data func() files.File
|
||||
expect func(files.File) files.File
|
||||
data func() files.Node
|
||||
expect func(files.Node) files.Node
|
||||
|
||||
path string
|
||||
err string
|
||||
|
||||
recursive bool
|
||||
wrap string
|
||||
|
||||
events []coreiface.AddEvent
|
||||
|
||||
@ -277,36 +280,45 @@ func TestAdd(t *testing.T) {
|
||||
},
|
||||
// multi file
|
||||
{
|
||||
name: "simpleDir",
|
||||
data: flatDir,
|
||||
recursive: true,
|
||||
path: "/ipfs/QmRKGpFfR32FVXdvJiHfo4WJ5TDYBsM1P9raAp1p6APWSp",
|
||||
name: "simpleDir",
|
||||
data: flatDir,
|
||||
wrap: "t",
|
||||
path: "/ipfs/QmRKGpFfR32FVXdvJiHfo4WJ5TDYBsM1P9raAp1p6APWSp",
|
||||
},
|
||||
{
|
||||
name: "twoLevelDir",
|
||||
data: twoLevelDir(),
|
||||
recursive: true,
|
||||
path: "/ipfs/QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr",
|
||||
name: "twoLevelDir",
|
||||
data: twoLevelDir(),
|
||||
wrap: "t",
|
||||
path: "/ipfs/QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr",
|
||||
},
|
||||
// wrapped
|
||||
{
|
||||
name: "addWrapped",
|
||||
path: "/ipfs/QmVE9rNpj5doj7XHzp5zMUxD7BJgXEqx4pe3xZ3JBReWHE",
|
||||
data: func() files.File {
|
||||
return files.NewReaderFile("foo", "foo", ioutil.NopCloser(strings.NewReader(helloStr)), nil)
|
||||
data: func() files.Node {
|
||||
return files.NewBytesFile([]byte(helloStr))
|
||||
},
|
||||
expect: wrapped,
|
||||
wrap: "foo",
|
||||
expect: wrapped("foo"),
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Wrap(true)},
|
||||
},
|
||||
{
|
||||
name: "addNotWrappedDirFile",
|
||||
path: hello,
|
||||
data: func() files.Node {
|
||||
return files.NewBytesFile([]byte(helloStr))
|
||||
},
|
||||
wrap: "foo",
|
||||
},
|
||||
{
|
||||
name: "stdinWrapped",
|
||||
path: "/ipfs/QmU3r81oZycjHS9oaSHw37ootMFuFUw1DvMLKXPsezdtqU",
|
||||
data: func() files.File {
|
||||
return files.NewReaderFile("", os.Stdin.Name(), ioutil.NopCloser(strings.NewReader(helloStr)), nil)
|
||||
data: func() files.Node {
|
||||
return files.NewBytesFile([]byte(helloStr))
|
||||
},
|
||||
expect: func(files.File) files.File {
|
||||
return files.NewSliceFile("", "", []files.File{
|
||||
files.NewReaderFile("QmQy2Dw4Wk7rdJKjThjYXzfFJNaRKRHhHP5gHHXroJMYxk", "QmQy2Dw4Wk7rdJKjThjYXzfFJNaRKRHhHP5gHHXroJMYxk", ioutil.NopCloser(strings.NewReader(helloStr)), nil),
|
||||
expect: func(files.Node) files.Node {
|
||||
return files.NewMapDirectory(map[string]files.Node{
|
||||
"QmQy2Dw4Wk7rdJKjThjYXzfFJNaRKRHhHP5gHHXroJMYxk": files.NewBytesFile([]byte(helloStr)),
|
||||
})
|
||||
},
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Wrap(true)},
|
||||
@ -314,69 +326,74 @@ func TestAdd(t *testing.T) {
|
||||
{
|
||||
name: "stdinNamed",
|
||||
path: "/ipfs/QmQ6cGBmb3ZbdrQW1MRm1RJnYnaxCqfssz7CrTa9NEhQyS",
|
||||
data: func() files.File {
|
||||
return files.NewReaderFile("", os.Stdin.Name(), ioutil.NopCloser(strings.NewReader(helloStr)), nil)
|
||||
data: func() files.Node {
|
||||
rf, err := files.NewReaderPathFile(os.Stdin.Name(), ioutil.NopCloser(strings.NewReader(helloStr)), nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return rf
|
||||
},
|
||||
expect: func(files.File) files.File {
|
||||
return files.NewSliceFile("", "", []files.File{
|
||||
files.NewReaderFile("test", "test", ioutil.NopCloser(strings.NewReader(helloStr)), nil),
|
||||
expect: func(files.Node) files.Node {
|
||||
return files.NewMapDirectory(map[string]files.Node{
|
||||
"test": files.NewBytesFile([]byte(helloStr)),
|
||||
})
|
||||
},
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Wrap(true), options.Unixfs.StdinName("test")},
|
||||
},
|
||||
{
|
||||
name: "twoLevelDirWrapped",
|
||||
data: twoLevelDir(),
|
||||
recursive: true,
|
||||
expect: wrapped,
|
||||
path: "/ipfs/QmPwsL3T5sWhDmmAWZHAzyjKtMVDS9a11aHNRqb3xoVnmg",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Wrap(true)},
|
||||
name: "twoLevelDirWrapped",
|
||||
data: twoLevelDir(),
|
||||
wrap: "t",
|
||||
expect: wrapped("t"),
|
||||
path: "/ipfs/QmPwsL3T5sWhDmmAWZHAzyjKtMVDS9a11aHNRqb3xoVnmg",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Wrap(true)},
|
||||
},
|
||||
{
|
||||
name: "twoLevelInlineHash",
|
||||
data: twoLevelDir(),
|
||||
recursive: true,
|
||||
expect: wrapped,
|
||||
path: "/ipfs/zBunoruKoyCHKkALNSWxDvj4L7yuQnMgQ4hUa9j1Z64tVcDEcu6Zdetyu7eeFCxMPfxb7YJvHeFHoFoHMkBUQf6vfdhmi",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Wrap(true), options.Unixfs.Inline(true), options.Unixfs.RawLeaves(true), options.Unixfs.Hash(mh.SHA3)},
|
||||
name: "twoLevelInlineHash",
|
||||
data: twoLevelDir(),
|
||||
wrap: "t",
|
||||
expect: wrapped("t"),
|
||||
path: "/ipfs/zBunoruKoyCHKkALNSWxDvj4L7yuQnMgQ4hUa9j1Z64tVcDEcu6Zdetyu7eeFCxMPfxb7YJvHeFHoFoHMkBUQf6vfdhmi",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Wrap(true), options.Unixfs.Inline(true), options.Unixfs.RawLeaves(true), options.Unixfs.Hash(mh.SHA3)},
|
||||
},
|
||||
// hidden
|
||||
{
|
||||
name: "hiddenFiles",
|
||||
data: func() files.File {
|
||||
return files.NewSliceFile("t", "t", []files.File{
|
||||
files.NewReaderFile("t/.bar", "t/.bar", ioutil.NopCloser(strings.NewReader("hello2")), nil),
|
||||
files.NewReaderFile("t/bar", "t/bar", ioutil.NopCloser(strings.NewReader("hello2")), nil),
|
||||
files.NewReaderFile("t/foo", "t/foo", ioutil.NopCloser(strings.NewReader("hello1")), nil),
|
||||
data: func() files.Node {
|
||||
return files.NewMapDirectory(map[string]files.Node{
|
||||
".bar": files.NewBytesFile([]byte("hello2")),
|
||||
"bar": files.NewBytesFile([]byte("hello2")),
|
||||
"foo": files.NewBytesFile([]byte("hello1")),
|
||||
})
|
||||
},
|
||||
recursive: true,
|
||||
path: "/ipfs/QmehGvpf2hY196MzDFmjL8Wy27S4jbgGDUAhBJyvXAwr3g",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Hidden(true)},
|
||||
wrap: "t",
|
||||
path: "/ipfs/QmehGvpf2hY196MzDFmjL8Wy27S4jbgGDUAhBJyvXAwr3g",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Hidden(true)},
|
||||
},
|
||||
{
|
||||
name: "hiddenFileAlwaysAdded",
|
||||
data: func() files.File {
|
||||
return files.NewReaderFile(".foo", ".foo", ioutil.NopCloser(strings.NewReader(helloStr)), nil)
|
||||
data: func() files.Node {
|
||||
return files.NewBytesFile([]byte(helloStr))
|
||||
},
|
||||
recursive: true,
|
||||
path: hello,
|
||||
wrap: ".foo",
|
||||
path: hello,
|
||||
},
|
||||
{
|
||||
name: "hiddenFilesNotAdded",
|
||||
data: func() files.File {
|
||||
return files.NewSliceFile("t", "t", []files.File{
|
||||
files.NewReaderFile("t/.bar", "t/.bar", ioutil.NopCloser(strings.NewReader("hello2")), nil),
|
||||
files.NewReaderFile("t/bar", "t/bar", ioutil.NopCloser(strings.NewReader("hello2")), nil),
|
||||
files.NewReaderFile("t/foo", "t/foo", ioutil.NopCloser(strings.NewReader("hello1")), nil),
|
||||
data: func() files.Node {
|
||||
return files.NewMapDirectory(map[string]files.Node{
|
||||
".bar": files.NewBytesFile([]byte("hello2")),
|
||||
"bar": files.NewBytesFile([]byte("hello2")),
|
||||
"foo": files.NewBytesFile([]byte("hello1")),
|
||||
})
|
||||
},
|
||||
expect: func(files.File) files.File {
|
||||
expect: func(files.Node) files.Node {
|
||||
return flatDir()
|
||||
},
|
||||
recursive: true,
|
||||
path: "/ipfs/QmRKGpFfR32FVXdvJiHfo4WJ5TDYBsM1P9raAp1p6APWSp",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Hidden(false)},
|
||||
wrap: "t",
|
||||
path: "/ipfs/QmRKGpFfR32FVXdvJiHfo4WJ5TDYBsM1P9raAp1p6APWSp",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Hidden(false)},
|
||||
},
|
||||
// Events / Progress
|
||||
{
|
||||
@ -396,8 +413,8 @@ func TestAdd(t *testing.T) {
|
||||
{Name: "t/abc", Hash: "QmU7nuGs2djqK99UNsNgEPGh6GV4662p6WtsgccBNGTDxt", Size: "62"},
|
||||
{Name: "t", Hash: "QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr", Size: "229"},
|
||||
},
|
||||
recursive: true,
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Silent(true)},
|
||||
wrap: "t",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Silent(true)},
|
||||
},
|
||||
{
|
||||
name: "dirAddEvents",
|
||||
@ -410,13 +427,12 @@ func TestAdd(t *testing.T) {
|
||||
{Name: "t/abc", Hash: "QmU7nuGs2djqK99UNsNgEPGh6GV4662p6WtsgccBNGTDxt", Size: "62"},
|
||||
{Name: "t", Hash: "QmVG2ZYCkV1S4TK8URA3a4RupBF17A8yAr4FqsRDXVJASr", Size: "229"},
|
||||
},
|
||||
recursive: true,
|
||||
wrap: "t",
|
||||
},
|
||||
{
|
||||
name: "progress1M",
|
||||
data: func() files.File {
|
||||
r := bytes.NewReader(bytes.Repeat([]byte{0}, 1000000))
|
||||
return files.NewReaderFile("", "", ioutil.NopCloser(r), nil)
|
||||
data: func() files.Node {
|
||||
return files.NewReaderFile(bytes.NewReader(bytes.Repeat([]byte{0}, 1000000)))
|
||||
},
|
||||
path: "/ipfs/QmXXNNbwe4zzpdMg62ZXvnX1oU7MwSrQ3vAEtuwFKCm1oD",
|
||||
events: []coreiface.AddEvent{
|
||||
@ -426,8 +442,8 @@ func TestAdd(t *testing.T) {
|
||||
{Name: "", Bytes: 1000000},
|
||||
{Name: "QmXXNNbwe4zzpdMg62ZXvnX1oU7MwSrQ3vAEtuwFKCm1oD", Hash: "QmXXNNbwe4zzpdMg62ZXvnX1oU7MwSrQ3vAEtuwFKCm1oD", Size: "1000256"},
|
||||
},
|
||||
recursive: true,
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Progress(true)},
|
||||
wrap: "",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Progress(true)},
|
||||
},
|
||||
}
|
||||
|
||||
@ -439,9 +455,9 @@ func TestAdd(t *testing.T) {
|
||||
// recursive logic
|
||||
|
||||
data := testCase.data()
|
||||
if testCase.recursive {
|
||||
data = files.NewSliceFile("", "", []files.File{
|
||||
data,
|
||||
if testCase.wrap != "" {
|
||||
data = files.NewMapDirectory(map[string]files.Node{
|
||||
testCase.wrap: data,
|
||||
})
|
||||
}
|
||||
|
||||
@ -516,22 +532,29 @@ func TestAdd(t *testing.T) {
|
||||
|
||||
// compare file structure with Unixfs().Get
|
||||
|
||||
var cmpFile func(orig files.File, got files.File)
|
||||
cmpFile = func(orig files.File, got files.File) {
|
||||
if orig.IsDirectory() != got.IsDirectory() {
|
||||
var cmpFile func(origName string, orig files.Node, gotName string, got files.Node)
|
||||
cmpFile = func(origName string, orig files.Node, gotName string, got files.Node) {
|
||||
_, origDir := orig.(files.Directory)
|
||||
_, gotDir := got.(files.Directory)
|
||||
|
||||
if origDir != gotDir {
|
||||
t.Fatal("file type mismatch")
|
||||
}
|
||||
|
||||
if !orig.IsDirectory() {
|
||||
if origName != gotName {
|
||||
t.Errorf("file name mismatch, orig='%s', got='%s'", origName, gotName)
|
||||
}
|
||||
|
||||
if !gotDir {
|
||||
defer orig.Close()
|
||||
defer got.Close()
|
||||
|
||||
do, err := ioutil.ReadAll(orig)
|
||||
do, err := ioutil.ReadAll(orig.(files.File))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
dg, err := ioutil.ReadAll(got)
|
||||
dg, err := ioutil.ReadAll(got.(files.File))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -543,21 +566,28 @@ func TestAdd(t *testing.T) {
|
||||
return
|
||||
}
|
||||
|
||||
origIt := orig.(files.Directory).Entries()
|
||||
gotIt := got.(files.Directory).Entries()
|
||||
|
||||
for {
|
||||
fo, err := orig.NextFile()
|
||||
fg, err2 := got.NextFile()
|
||||
|
||||
if err != nil {
|
||||
if err == io.EOF && err2 == io.EOF {
|
||||
break
|
||||
if origIt.Next() {
|
||||
if !gotIt.Next() {
|
||||
t.Fatal("gotIt out of entries before origIt")
|
||||
}
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err2 != nil {
|
||||
t.Fatal(err)
|
||||
} else {
|
||||
if gotIt.Next() {
|
||||
t.Fatal("origIt out of entries before gotIt")
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
cmpFile(fo, fg)
|
||||
cmpFile(origIt.Name(), origIt.Node(), gotIt.Name(), gotIt.Node())
|
||||
}
|
||||
if origIt.Err() != nil {
|
||||
t.Fatal(origIt.Err())
|
||||
}
|
||||
if gotIt.Err() != nil {
|
||||
t.Fatal(gotIt.Err())
|
||||
}
|
||||
}
|
||||
|
||||
@ -571,7 +601,7 @@ func TestAdd(t *testing.T) {
|
||||
orig = testCase.expect(orig)
|
||||
}
|
||||
|
||||
cmpFile(orig, f)
|
||||
cmpFile("", orig, "", f)
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -646,7 +676,7 @@ func TestGetEmptyFile(t *testing.T) {
|
||||
}
|
||||
|
||||
buf := make([]byte, 1) // non-zero so that Read() actually tries to read
|
||||
n, err := io.ReadFull(r, buf)
|
||||
n, err := io.ReadFull(r.(files.File), buf)
|
||||
if err != nil && err != io.EOF {
|
||||
t.Error(err)
|
||||
}
|
||||
@ -682,9 +712,8 @@ func TestGetDir(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
_, err = r.Read(make([]byte, 2))
|
||||
if err != files.ErrNotReader {
|
||||
t.Fatalf("expected ErrIsDir, got: %s", err)
|
||||
if _, ok := r.(files.Directory); !ok {
|
||||
t.Fatalf("expected a directory")
|
||||
}
|
||||
}
|
||||
|
||||
@ -747,6 +776,53 @@ func TestLs(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestEntriesExpired(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
node, api, err := makeAPI(ctx)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
r := strings.NewReader("content-of-file")
|
||||
k, _, err := coreunix.AddWrapped(node, r, "name-of-file")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
parts := strings.Split(k, "/")
|
||||
if len(parts) != 2 {
|
||||
t.Errorf("unexpected path: %s", k)
|
||||
}
|
||||
p, err := coreiface.ParsePath("/ipfs/" + parts[0])
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
|
||||
nd, err := api.Unixfs().Get(ctx, p)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
cancel()
|
||||
|
||||
it := files.ToDir(nd).Entries()
|
||||
if it == nil {
|
||||
t.Fatal("it was nil")
|
||||
}
|
||||
|
||||
if it.Next() {
|
||||
t.Fatal("Next succeeded")
|
||||
}
|
||||
|
||||
if it.Err() != context.Canceled {
|
||||
t.Fatalf("unexpected error %s", it.Err())
|
||||
}
|
||||
|
||||
if it.Next() {
|
||||
t.Fatal("Next succeeded")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLsEmptyDir(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
node, api, err := makeAPI(ctx)
|
||||
@ -801,3 +877,73 @@ func TestLsNonUnixfs(t *testing.T) {
|
||||
t.Fatalf("expected 0 links, got %d", len(links))
|
||||
}
|
||||
}
|
||||
|
||||
type closeTestF struct {
|
||||
files.File
|
||||
closed bool
|
||||
|
||||
t *testing.T
|
||||
}
|
||||
|
||||
type closeTestD struct {
|
||||
files.Directory
|
||||
closed bool
|
||||
|
||||
t *testing.T
|
||||
}
|
||||
|
||||
func (f *closeTestD) Close() error {
|
||||
if f.closed {
|
||||
f.t.Fatal("already closed")
|
||||
}
|
||||
f.closed = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *closeTestF) Close() error {
|
||||
if f.closed {
|
||||
f.t.Fatal("already closed")
|
||||
}
|
||||
f.closed = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func TestAddCloses(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
_, api, err := makeAPI(ctx)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
n4 := &closeTestF{files.NewBytesFile([]byte("foo")), false, t}
|
||||
d3 := &closeTestD{files.NewMapDirectory(map[string]files.Node{
|
||||
"sub": n4,
|
||||
}), false, t}
|
||||
n2 := &closeTestF{files.NewBytesFile([]byte("bar")), false, t}
|
||||
n1 := &closeTestF{files.NewBytesFile([]byte("baz")), false, t}
|
||||
d0 := &closeTestD{files.NewMapDirectory(map[string]files.Node{
|
||||
"a": d3,
|
||||
"b": n1,
|
||||
"c": n2,
|
||||
}), false, t}
|
||||
|
||||
_, err = api.Unixfs().Add(ctx, d0)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
d0.Close() // Adder doesn't close top-level file
|
||||
|
||||
for i, n := range []*closeTestF{n1, n2, n4} {
|
||||
if !n.closed {
|
||||
t.Errorf("file %d not closed!", i)
|
||||
}
|
||||
}
|
||||
|
||||
for i, n := range []*closeTestD{d0, d3} {
|
||||
if !n.closed {
|
||||
t.Errorf("dir %d not closed!", i)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -14,10 +14,10 @@ import (
|
||||
"github.com/ipfs/go-ipfs/core"
|
||||
corecommands "github.com/ipfs/go-ipfs/core/commands"
|
||||
|
||||
cmds "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds"
|
||||
cmdsHttp "gx/ipfs/QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM/go-ipfs-cmds/http"
|
||||
config "gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
cmds "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds"
|
||||
cmdsHttp "gx/ipfs/QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV/go-ipfs-cmds/http"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@ -5,7 +5,6 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
@ -14,23 +13,23 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
core "github.com/ipfs/go-ipfs/core"
|
||||
"github.com/ipfs/go-ipfs/core"
|
||||
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
"github.com/ipfs/go-ipfs/dagutils"
|
||||
|
||||
humanize "gx/ipfs/QmPSBJL4momYnE7DcUyk2DVhD6rH488ZmHBGLbxNdhU44K/go-humanize"
|
||||
"gx/ipfs/QmPSBJL4momYnE7DcUyk2DVhD6rH488ZmHBGLbxNdhU44K/go-humanize"
|
||||
chunker "gx/ipfs/QmR4QQVkBZsZENRjYFVi8dEtPL3daZRNKk24m4r6WKJHNm/go-ipfs-chunker"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
routing "gx/ipfs/QmRASJXJUFygM5qU4YrH7k7jD6S4Hg8nJmgqJ4bYJvLatd/go-libp2p-routing"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
resolver "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path/resolver"
|
||||
files "gx/ipfs/QmZMWMvWMVKCbHetJ4RgndbuEF1io2UpUxwQwtNjtYPzSC/go-ipfs-files"
|
||||
"gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
"gx/ipfs/QmRASJXJUFygM5qU4YrH7k7jD6S4Hg8nJmgqJ4bYJvLatd/go-libp2p-routing"
|
||||
"gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
"gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
"gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path/resolver"
|
||||
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
"gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/importer"
|
||||
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
ft "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
"gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/importer"
|
||||
uio "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/io"
|
||||
multibase "gx/ipfs/QmekxXDhCxCJRNuzmHreuaT3BsuJcsjcXWNrtV9C8DRHtd/go-multibase"
|
||||
"gx/ipfs/QmekxXDhCxCJRNuzmHreuaT3BsuJcsjcXWNrtV9C8DRHtd/go-multibase"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -172,10 +171,7 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr
|
||||
return
|
||||
}
|
||||
|
||||
dir := dr.IsDirectory()
|
||||
if !dir {
|
||||
defer dr.Close()
|
||||
}
|
||||
defer dr.Close()
|
||||
|
||||
// Check etag send back to us
|
||||
etag := "\"" + resolvedPath.Cid().String() + "\""
|
||||
@ -240,14 +236,14 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr
|
||||
// TODO: break this out when we split /ipfs /ipns routes.
|
||||
modtime := time.Now()
|
||||
|
||||
if strings.HasPrefix(urlPath, ipfsPathPrefix) && !dir {
|
||||
w.Header().Set("Cache-Control", "public, max-age=29030400, immutable")
|
||||
if f, ok := dr.(files.File); ok {
|
||||
if strings.HasPrefix(urlPath, ipfsPathPrefix) {
|
||||
w.Header().Set("Cache-Control", "public, max-age=29030400, immutable")
|
||||
|
||||
// set modtime to a really long time ago, since files are immutable and should stay cached
|
||||
modtime = time.Unix(1, 0)
|
||||
}
|
||||
// set modtime to a really long time ago, since files are immutable and should stay cached
|
||||
modtime = time.Unix(1, 0)
|
||||
}
|
||||
|
||||
if !dir {
|
||||
urlFilename := r.URL.Query().Get("filename")
|
||||
var name string
|
||||
if urlFilename != "" {
|
||||
@ -256,8 +252,9 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr
|
||||
} else {
|
||||
name = getFilename(urlPath)
|
||||
}
|
||||
i.serveFile(w, r, name, modtime, dr)
|
||||
i.serveFile(w, r, name, modtime, f)
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
nd, err := i.api.ResolveNode(ctx, resolvedPath)
|
||||
@ -290,8 +287,14 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr
|
||||
}
|
||||
defer dr.Close()
|
||||
|
||||
f, ok := dr.(files.File)
|
||||
if !ok {
|
||||
internalWebError(w, files.ErrNotReader)
|
||||
return
|
||||
}
|
||||
|
||||
// write to request
|
||||
http.ServeContent(w, r, "index.html", modtime, dr)
|
||||
http.ServeContent(w, r, "index.html", modtime, f)
|
||||
return
|
||||
default:
|
||||
internalWebError(w, err)
|
||||
@ -386,7 +389,7 @@ func (i *gatewayHandler) serveFile(w http.ResponseWriter, req *http.Request, nam
|
||||
}
|
||||
|
||||
func (i *gatewayHandler) postHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) {
|
||||
p, err := i.api.Unixfs().Add(ctx, files.NewReaderFile("", "", ioutil.NopCloser(r.Body), nil))
|
||||
p, err := i.api.Unixfs().Add(ctx, files.NewReaderFile(r.Body))
|
||||
if err != nil {
|
||||
internalWebError(w, err)
|
||||
return
|
||||
|
||||
@ -12,7 +12,7 @@ import (
|
||||
|
||||
humanize "gx/ipfs/QmPSBJL4momYnE7DcUyk2DVhD6rH488ZmHBGLbxNdhU44K/go-humanize"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
mfs "gx/ipfs/QmYnp3EVZqLjzm8NYigcB3aHqDLFmAVUvtaUdYb3nFDtK6/go-mfs"
|
||||
mfs "gx/ipfs/QmU3iDRUrxyTYdV2j5MuWLFvP1k7w98vD66PLnNChgvUmZ/go-mfs"
|
||||
logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log"
|
||||
)
|
||||
|
||||
|
||||
@ -2,31 +2,31 @@ package coreunix
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
gopath "path"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
|
||||
core "github.com/ipfs/go-ipfs/core"
|
||||
"github.com/ipfs/go-ipfs/core"
|
||||
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
|
||||
"github.com/ipfs/go-ipfs/pin"
|
||||
|
||||
chunker "gx/ipfs/QmR4QQVkBZsZENRjYFVi8dEtPL3daZRNKk24m4r6WKJHNm/go-ipfs-chunker"
|
||||
posinfo "gx/ipfs/QmR6YMs8EkXQLXNwQKxLnQp2VBZSepoEJ8KCZAyanJHhJu/go-ipfs-posinfo"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
"gx/ipfs/QmR6YMs8EkXQLXNwQKxLnQp2VBZSepoEJ8KCZAyanJHhJu/go-ipfs-posinfo"
|
||||
"gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
bstore "gx/ipfs/QmS2aqUZLJp8kF1ihE5rvDGE5LvmKDPnx32w9Z1BW9xLV5/go-ipfs-blockstore"
|
||||
mfs "gx/ipfs/QmYnp3EVZqLjzm8NYigcB3aHqDLFmAVUvtaUdYb3nFDtK6/go-mfs"
|
||||
files "gx/ipfs/QmZMWMvWMVKCbHetJ4RgndbuEF1io2UpUxwQwtNjtYPzSC/go-ipfs-files"
|
||||
"gx/ipfs/QmU3iDRUrxyTYdV2j5MuWLFvP1k7w98vD66PLnNChgvUmZ/go-mfs"
|
||||
"gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
"gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
"gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/importer/balanced"
|
||||
ihelper "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/importer/helpers"
|
||||
"gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/importer/trickle"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
unixfs "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
balanced "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/importer/balanced"
|
||||
ihelper "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/importer/helpers"
|
||||
trickle "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/importer/trickle"
|
||||
)
|
||||
|
||||
var log = logging.Logger("coreunix")
|
||||
@ -311,7 +311,7 @@ func AddR(n *core.IpfsNode, root string) (key string, err error) {
|
||||
return "", err
|
||||
}
|
||||
|
||||
f, err := files.NewSerialFile(filepath.Base(root), root, false, stat)
|
||||
f, err := files.NewSerialFile(root, false, stat)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@ -322,7 +322,7 @@ func AddR(n *core.IpfsNode, root string) (key string, err error) {
|
||||
return "", err
|
||||
}
|
||||
|
||||
err = fileAdder.addFile(f)
|
||||
err = fileAdder.addFileNode(filepath.Base(root), f)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@ -340,7 +340,6 @@ func AddR(n *core.IpfsNode, root string) (key string, err error) {
|
||||
// Returns the path of the added file ("<dir hash>/filename"), the DAG node of
|
||||
// the directory, and and error if any.
|
||||
func AddWrapped(n *core.IpfsNode, r io.Reader, filename string) (string, ipld.Node, error) {
|
||||
file := files.NewReaderFile(filename, filename, ioutil.NopCloser(r), nil)
|
||||
fileAdder, err := NewAdder(n.Context(), n.Pinning, n.Blockstore, n.DAG)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
@ -349,7 +348,7 @@ func AddWrapped(n *core.IpfsNode, r io.Reader, filename string) (string, ipld.No
|
||||
|
||||
defer n.Blockstore.PinLock().Unlock()
|
||||
|
||||
err = fileAdder.addFile(file)
|
||||
err = fileAdder.addFileNode(filename, files.NewReaderFile(r))
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
@ -400,7 +399,7 @@ func (adder *Adder) addNode(node ipld.Node, path string) error {
|
||||
}
|
||||
|
||||
// AddAllAndPin adds the given request's files and pin them.
|
||||
func (adder *Adder) AddAllAndPin(file files.File) (ipld.Node, error) {
|
||||
func (adder *Adder) AddAllAndPin(file files.Node) (ipld.Node, error) {
|
||||
if adder.Pin {
|
||||
adder.unlocker = adder.blockstore.PinLock()
|
||||
}
|
||||
@ -410,26 +409,23 @@ func (adder *Adder) AddAllAndPin(file files.File) (ipld.Node, error) {
|
||||
}
|
||||
}()
|
||||
|
||||
switch {
|
||||
case file.IsDirectory():
|
||||
switch tf := file.(type) {
|
||||
case files.Directory:
|
||||
// Iterate over each top-level file and add individually. Otherwise the
|
||||
// single files.File f is treated as a directory, affecting hidden file
|
||||
// semantics.
|
||||
for {
|
||||
f, err := file.NextFile()
|
||||
if err == io.EOF {
|
||||
// Finished the list of files.
|
||||
break
|
||||
} else if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := adder.addFile(f); err != nil {
|
||||
it := tf.Entries()
|
||||
for it.Next() {
|
||||
if err := adder.addFileNode(it.Name(), it.Node()); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if it.Err() != nil {
|
||||
return nil, it.Err()
|
||||
}
|
||||
break
|
||||
default:
|
||||
if err := adder.addFile(file); err != nil {
|
||||
if err := adder.addFileNode("", file); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
break
|
||||
@ -447,7 +443,8 @@ func (adder *Adder) AddAllAndPin(file files.File) (ipld.Node, error) {
|
||||
return nd, adder.PinRoot()
|
||||
}
|
||||
|
||||
func (adder *Adder) addFile(file files.File) error {
|
||||
func (adder *Adder) addFileNode(path string, file files.Node) error {
|
||||
defer file.Close()
|
||||
err := adder.maybePauseForGC()
|
||||
if err != nil {
|
||||
return err
|
||||
@ -467,33 +464,40 @@ func (adder *Adder) addFile(file files.File) error {
|
||||
}
|
||||
adder.liveNodes++
|
||||
|
||||
if file.IsDirectory() {
|
||||
return adder.addDir(file)
|
||||
switch f := file.(type) {
|
||||
case files.Directory:
|
||||
return adder.addDir(path, f)
|
||||
case *files.Symlink:
|
||||
return adder.addSymlink(path, f)
|
||||
case files.File:
|
||||
return adder.addFile(path, f)
|
||||
default:
|
||||
return errors.New("unknown file type")
|
||||
}
|
||||
}
|
||||
|
||||
func (adder *Adder) addSymlink(path string, l *files.Symlink) error {
|
||||
sdata, err := unixfs.SymlinkData(l.Target)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// case for symlink
|
||||
if s, ok := file.(*files.Symlink); ok {
|
||||
sdata, err := unixfs.SymlinkData(s.Target)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
dagnode := dag.NodeWithData(sdata)
|
||||
dagnode.SetCidBuilder(adder.CidBuilder)
|
||||
err = adder.dagService.Add(adder.ctx, dagnode)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return adder.addNode(dagnode, s.FileName())
|
||||
dagnode := dag.NodeWithData(sdata)
|
||||
dagnode.SetCidBuilder(adder.CidBuilder)
|
||||
err = adder.dagService.Add(adder.ctx, dagnode)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// case for regular file
|
||||
return adder.addNode(dagnode, path)
|
||||
}
|
||||
|
||||
func (adder *Adder) addFile(path string, file files.File) error {
|
||||
// if the progress flag was specified, wrap the file so that we can send
|
||||
// progress updates to the client (over the output channel)
|
||||
var reader io.Reader = file
|
||||
if adder.Progress {
|
||||
rdr := &progressReader{file: file, out: adder.Out}
|
||||
rdr := &progressReader{file: reader, path: path, out: adder.Out}
|
||||
if fi, ok := file.(files.FileInfo); ok {
|
||||
reader = &progressReader2{rdr, fi}
|
||||
} else {
|
||||
@ -506,26 +510,25 @@ func (adder *Adder) addFile(file files.File) error {
|
||||
return err
|
||||
}
|
||||
|
||||
addFileName := file.FileName()
|
||||
addFileInfo, ok := file.(files.FileInfo)
|
||||
if ok {
|
||||
if addFileInfo.AbsPath() == os.Stdin.Name() && adder.Name != "" {
|
||||
addFileName = adder.Name
|
||||
path = adder.Name
|
||||
adder.Name = ""
|
||||
}
|
||||
}
|
||||
// patch it into the root
|
||||
return adder.addNode(dagnode, addFileName)
|
||||
return adder.addNode(dagnode, path)
|
||||
}
|
||||
|
||||
func (adder *Adder) addDir(dir files.File) error {
|
||||
log.Infof("adding directory: %s", dir.FileName())
|
||||
func (adder *Adder) addDir(path string, dir files.Directory) error {
|
||||
log.Infof("adding directory: %s", path)
|
||||
|
||||
mr, err := adder.mfsRoot()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = mfs.Mkdir(mr, dir.FileName(), mfs.MkdirOpts{
|
||||
err = mfs.Mkdir(mr, path, mfs.MkdirOpts{
|
||||
Mkparents: true,
|
||||
Flush: false,
|
||||
CidBuilder: adder.CidBuilder,
|
||||
@ -534,27 +537,22 @@ func (adder *Adder) addDir(dir files.File) error {
|
||||
return err
|
||||
}
|
||||
|
||||
for {
|
||||
file, err := dir.NextFile()
|
||||
if err != nil && err != io.EOF {
|
||||
return err
|
||||
}
|
||||
if file == nil {
|
||||
break
|
||||
}
|
||||
it := dir.Entries()
|
||||
for it.Next() {
|
||||
fpath := gopath.Join(path, it.Name())
|
||||
|
||||
// Skip hidden files when adding recursively, unless Hidden is enabled.
|
||||
if files.IsHidden(file) && !adder.Hidden {
|
||||
log.Infof("%s is hidden, skipping", file.FileName())
|
||||
if files.IsHidden(fpath, it.Node()) && !adder.Hidden {
|
||||
log.Infof("%s is hidden, skipping", fpath)
|
||||
continue
|
||||
}
|
||||
err = adder.addFile(file)
|
||||
err = adder.addFileNode(fpath, it.Node())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
return it.Err()
|
||||
}
|
||||
|
||||
func (adder *Adder) maybePauseForGC() error {
|
||||
@ -615,7 +613,8 @@ func getOutput(dagnode ipld.Node) (*Object, error) {
|
||||
}
|
||||
|
||||
type progressReader struct {
|
||||
file files.File
|
||||
file io.Reader
|
||||
path string
|
||||
out chan<- interface{}
|
||||
bytes int64
|
||||
lastProgress int64
|
||||
@ -628,7 +627,7 @@ func (i *progressReader) Read(p []byte) (int, error) {
|
||||
if i.bytes-i.lastProgress >= progressReaderIncrement || err == io.EOF {
|
||||
i.lastProgress = i.bytes
|
||||
i.out <- &coreiface.AddEvent{
|
||||
Name: i.file.FileName(),
|
||||
Name: i.path,
|
||||
Bytes: i.bytes,
|
||||
}
|
||||
}
|
||||
@ -640,3 +639,7 @@ type progressReader2 struct {
|
||||
*progressReader
|
||||
files.FileInfo
|
||||
}
|
||||
|
||||
func (i *progressReader2) Read(p []byte) (int, error) {
|
||||
return i.progressReader.Read(p)
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import (
|
||||
"io/ioutil"
|
||||
"math/rand"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@ -20,8 +21,8 @@ import (
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
blockstore "gx/ipfs/QmS2aqUZLJp8kF1ihE5rvDGE5LvmKDPnx32w9Z1BW9xLV5/go-ipfs-blockstore"
|
||||
blocks "gx/ipfs/QmWoXtvgC8inqFkAATB7cp2Dax7XBi9VDvSg9RCCZufmRk/go-block-format"
|
||||
files "gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
config "gx/ipfs/QmYyzmMnhNTtoXx5ttgUaRdHHckYnQWjPL98hgLAR2QLDD/go-ipfs-config"
|
||||
files "gx/ipfs/QmZMWMvWMVKCbHetJ4RgndbuEF1io2UpUxwQwtNjtYPzSC/go-ipfs-files"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
datastore "gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore"
|
||||
syncds "gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore/sync"
|
||||
@ -70,17 +71,19 @@ func TestAddGCLive(t *testing.T) {
|
||||
}
|
||||
adder.Out = out
|
||||
|
||||
dataa := ioutil.NopCloser(bytes.NewBufferString("testfileA"))
|
||||
rfa := files.NewReaderFile("a", "a", dataa, nil)
|
||||
rfa := files.NewBytesFile([]byte("testfileA"))
|
||||
|
||||
// make two files with pipes so we can 'pause' the add for timing of the test
|
||||
piper, pipew := io.Pipe()
|
||||
hangfile := files.NewReaderFile("b", "b", piper, nil)
|
||||
hangfile := files.NewReaderFile(piper)
|
||||
|
||||
datad := ioutil.NopCloser(bytes.NewBufferString("testfileD"))
|
||||
rfd := files.NewReaderFile("d", "d", datad, nil)
|
||||
rfd := files.NewBytesFile([]byte("testfileD"))
|
||||
|
||||
slf := files.NewSliceFile("files", "files", []files.File{rfa, hangfile, rfd})
|
||||
slf := files.NewMapDirectory(map[string]files.Node{
|
||||
"a": rfa,
|
||||
"b": hangfile,
|
||||
"d": rfd,
|
||||
})
|
||||
|
||||
addDone := make(chan struct{})
|
||||
go func() {
|
||||
@ -172,7 +175,7 @@ func testAddWPosInfo(t *testing.T, rawLeaves bool) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
bs := &testBlockstore{GCBlockstore: node.Blockstore, expectedPath: "/tmp/foo.txt", t: t}
|
||||
bs := &testBlockstore{GCBlockstore: node.Blockstore, expectedPath: filepath.Join(os.TempDir(), "foo.txt"), t: t}
|
||||
bserv := blockservice.New(bs, node.Exchange)
|
||||
dserv := dag.NewDAGService(bserv)
|
||||
adder, err := NewAdder(context.Background(), node.Pinning, bs, dserv)
|
||||
@ -189,7 +192,7 @@ func testAddWPosInfo(t *testing.T, rawLeaves bool) {
|
||||
rand.New(rand.NewSource(2)).Read(data) // Rand.Read never returns an error
|
||||
fileData := ioutil.NopCloser(bytes.NewBuffer(data))
|
||||
fileInfo := dummyFileInfo{"foo.txt", int64(len(data)), time.Now()}
|
||||
file := files.NewReaderFile("foo.txt", "/tmp/foo.txt", fileData, &fileInfo)
|
||||
file, _ := files.NewReaderPathFile(filepath.Join(os.TempDir(), "foo.txt"), fileData, &fileInfo)
|
||||
|
||||
go func() {
|
||||
defer close(adder.Out)
|
||||
@ -208,7 +211,7 @@ func testAddWPosInfo(t *testing.T, rawLeaves bool) {
|
||||
nonOffZero = 19
|
||||
}
|
||||
if bs.countAtOffsetZero != exp {
|
||||
t.Fatalf("expected %d blocks with an offset at zero (one root and one leafh), got %d", exp, bs.countAtOffsetZero)
|
||||
t.Fatalf("expected %d blocks with an offset at zero (one root and one leaf), got %d", exp, bs.countAtOffsetZero)
|
||||
}
|
||||
if bs.countAtOffsetNonZero != nonOffZero {
|
||||
// note: the exact number will depend on the size and the sharding algo. used
|
||||
|
||||
@ -3,8 +3,8 @@ package coreunix
|
||||
import (
|
||||
core "github.com/ipfs/go-ipfs/core"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
ft "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
)
|
||||
|
||||
func AddMetadataTo(n *core.IpfsNode, skey string, m *ft.Metadata) (string, error) {
|
||||
|
||||
@ -8,10 +8,10 @@ import (
|
||||
|
||||
core "github.com/ipfs/go-ipfs/core"
|
||||
bserv "gx/ipfs/QmPoh3SrQzFBWtdGK6qmHDV4EanKR6kYPj4DD3J2NLoEmZ/go-blockservice"
|
||||
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
importer "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/importer"
|
||||
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
|
||||
merkledag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
ft "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
importer "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/importer"
|
||||
uio "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/io"
|
||||
|
||||
u "gx/ipfs/QmNohiVssaPw3KVLZik59DBVGTSm2dGvYT9eoXt5DQ36Yz/go-ipfs-util"
|
||||
chunker "gx/ipfs/QmR4QQVkBZsZENRjYFVi8dEtPL3daZRNKk24m4r6WKJHNm/go-ipfs-chunker"
|
||||
|
||||
@ -7,7 +7,7 @@ import (
|
||||
nsys "github.com/ipfs/go-ipfs/namesys"
|
||||
ci "gx/ipfs/QmNiJiXwWE3kRhZrC5ej3kSjWHm337pYfhjLGSCDNKJP2s/go-libp2p-crypto"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
ft "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
)
|
||||
|
||||
// InitializeKeyspace sets the ipns record for the given key to
|
||||
|
||||
@ -14,15 +14,15 @@ import (
|
||||
core "github.com/ipfs/go-ipfs/core"
|
||||
namesys "github.com/ipfs/go-ipfs/namesys"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
ft "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
|
||||
ci "gx/ipfs/QmNiJiXwWE3kRhZrC5ej3kSjWHm337pYfhjLGSCDNKJP2s/go-libp2p-crypto"
|
||||
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
|
||||
fuse "gx/ipfs/QmSJBsmLP1XMjv8hxYg2rUMdPDB7YUpyBo9idjrJ6Cmq6F/fuse"
|
||||
fs "gx/ipfs/QmSJBsmLP1XMjv8hxYg2rUMdPDB7YUpyBo9idjrJ6Cmq6F/fuse/fs"
|
||||
mfs "gx/ipfs/QmU3iDRUrxyTYdV2j5MuWLFvP1k7w98vD66PLnNChgvUmZ/go-mfs"
|
||||
peer "gx/ipfs/QmY5Grm8pJdiSSVsYxx4uNRgweY72EmYwuSDbRnbFok3iY/go-libp2p-peer"
|
||||
mfs "gx/ipfs/QmYnp3EVZqLjzm8NYigcB3aHqDLFmAVUvtaUdYb3nFDtK6/go-mfs"
|
||||
logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log"
|
||||
)
|
||||
|
||||
|
||||
@ -22,10 +22,11 @@ import (
|
||||
ci "gx/ipfs/QmPuhRE325DR8ChNcFtgd6F1eANCHy1oohXZPpYop4xsK6/go-testutil/ci"
|
||||
chunker "gx/ipfs/QmR4QQVkBZsZENRjYFVi8dEtPL3daZRNKk24m4r6WKJHNm/go-ipfs-chunker"
|
||||
fstest "gx/ipfs/QmSJBsmLP1XMjv8hxYg2rUMdPDB7YUpyBo9idjrJ6Cmq6F/fuse/fs/fstestutil"
|
||||
files "gx/ipfs/QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX/go-ipfs-files"
|
||||
importer "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/importer"
|
||||
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
importer "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/importer"
|
||||
uio "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/io"
|
||||
)
|
||||
|
||||
func maybeSkipFuseTests(t *testing.T) {
|
||||
@ -180,7 +181,7 @@ func TestIpfsStressRead(t *testing.T) {
|
||||
errs <- err
|
||||
}
|
||||
|
||||
data, err := ioutil.ReadAll(read)
|
||||
data, err := ioutil.ReadAll(read.(files.File))
|
||||
if err != nil {
|
||||
errs <- err
|
||||
}
|
||||
|
||||
@ -12,9 +12,9 @@ import (
|
||||
|
||||
core "github.com/ipfs/go-ipfs/core"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
|
||||
mdag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
ft "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
uio "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/io"
|
||||
|
||||
lgbl "gx/ipfs/QmQSREHX6CMoPkT5FfuA4A9cWSFwoKY8RAzjf5m7Gpdtqu/go-libp2p-loggables"
|
||||
fuse "gx/ipfs/QmSJBsmLP1XMjv8hxYg2rUMdPDB7YUpyBo9idjrJ6Cmq6F/fuse"
|
||||
|
||||
@ -12,7 +12,7 @@ import (
|
||||
peer "gx/ipfs/QmY5Grm8pJdiSSVsYxx4uNRgweY72EmYwuSDbRnbFok3iY/go-libp2p-peer"
|
||||
pstoremem "gx/ipfs/QmZ9zH2FnLcxv1xyzFeUpDUeo55xEhZQHgveZijcxr7TLj/go-libp2p-peerstore/pstoremem"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
"gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
"gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
offroute "gx/ipfs/QmdmWkx54g7VfVyxeG8ic84uf4G6Eq1GohuyKA3XDuJ8oC/go-ipfs-routing/offline"
|
||||
ds "gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore"
|
||||
dssync "gx/ipfs/Qmf4xQhNomPNhrtZc67qSnfJSjxjXs9LWvknJtSXwimPrM/go-datastore/sync"
|
||||
|
||||
@ -8,7 +8,7 @@ import (
|
||||
|
||||
pin "github.com/ipfs/go-ipfs/pin"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
ft "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs"
|
||||
ft "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs"
|
||||
|
||||
ci "gx/ipfs/QmNiJiXwWE3kRhZrC5ej3kSjWHm337pYfhjLGSCDNKJP2s/go-libp2p-crypto"
|
||||
ipns "gx/ipfs/QmPrt2JqvtFcgMBmYBjtZ5jFzq6HoFXy8PTwLb2Dpm2cGf/go-ipns"
|
||||
|
||||
16
package.json
16
package.json
@ -294,9 +294,9 @@
|
||||
"version": "3.0.27"
|
||||
},
|
||||
{
|
||||
"hash": "QmPdvMtgpnMuU68mWhGtzCxnddXJoV96tT9aPcNbQsqPaM",
|
||||
"hash": "QmaAP56JAwdjwisPTu4yx17whcjTr6y5JCSCF77Y1rahWV",
|
||||
"name": "go-ipfs-cmds",
|
||||
"version": "2.0.8"
|
||||
"version": "2.0.9"
|
||||
},
|
||||
{
|
||||
"hash": "Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg",
|
||||
@ -512,9 +512,9 @@
|
||||
},
|
||||
{
|
||||
"author": "why",
|
||||
"hash": "QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12",
|
||||
"hash": "Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB",
|
||||
"name": "go-unixfs",
|
||||
"version": "1.2.9"
|
||||
"version": "1.2.10"
|
||||
},
|
||||
{
|
||||
"author": "magik6k",
|
||||
@ -530,9 +530,9 @@
|
||||
},
|
||||
{
|
||||
"author": "hsanjuan",
|
||||
"hash": "QmYnp3EVZqLjzm8NYigcB3aHqDLFmAVUvtaUdYb3nFDtK6",
|
||||
"hash": "QmU3iDRUrxyTYdV2j5MuWLFvP1k7w98vD66PLnNChgvUmZ",
|
||||
"name": "go-mfs",
|
||||
"version": "0.1.27"
|
||||
"version": "0.1.28"
|
||||
},
|
||||
{
|
||||
"author": "kevina",
|
||||
@ -577,9 +577,9 @@
|
||||
},
|
||||
{
|
||||
"author": "magik6k",
|
||||
"hash": "QmZMWMvWMVKCbHetJ4RgndbuEF1io2UpUxwQwtNjtYPzSC",
|
||||
"hash": "QmXWZCd8jfaHmt4UDSnjKmGcrQMw95bDGWqEeVLVJjoANX",
|
||||
"name": "go-ipfs-files",
|
||||
"version": "1.0.1"
|
||||
"version": "2.0.3"
|
||||
},
|
||||
{
|
||||
"author": "whyrusleeping",
|
||||
|
||||
@ -10,9 +10,9 @@ import (
|
||||
|
||||
"github.com/ipfs/go-ipfs/dagutils"
|
||||
path "gx/ipfs/QmZErC2Ay6WuGi96CPg316PwitdwgLo6RxZRqVjJjRj2MR/go-path"
|
||||
importer "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/importer"
|
||||
uio "gx/ipfs/Qmbvw7kpSM2p6rbQ57WGRhhqNfCiNGW6EKH4xgHLw4bsnB/go-unixfs/io"
|
||||
dag "gx/ipfs/QmdV35UHnL1FM52baPkeUo6u7Fxm2CRUkPTLRPxeF8a4Ap/go-merkledag"
|
||||
importer "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/importer"
|
||||
uio "gx/ipfs/QmdYvDbHp7qAhZ7GsCj6e1cMo55ND6y2mjWVzwdvcv4f12/go-unixfs/io"
|
||||
|
||||
chunker "gx/ipfs/QmR4QQVkBZsZENRjYFVi8dEtPL3daZRNKk24m4r6WKJHNm/go-ipfs-chunker"
|
||||
ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format"
|
||||
|
||||
@ -154,7 +154,7 @@ func DirectAddCat(data []byte, conf testutil.LatencyConfig) error {
|
||||
|
||||
// verify
|
||||
bufout := new(bytes.Buffer)
|
||||
io.Copy(bufout, readerCatted)
|
||||
io.Copy(bufout, readerCatted.(io.Reader))
|
||||
if 0 != bytes.Compare(bufout.Bytes(), data) {
|
||||
return errors.New("catted data does not match added data")
|
||||
}
|
||||
|
||||
@ -101,7 +101,7 @@ func benchCat(b *testing.B, data []byte, conf testutil.LatencyConfig) error {
|
||||
|
||||
// verify
|
||||
bufout := new(bytes.Buffer)
|
||||
io.Copy(bufout, readerCatted)
|
||||
io.Copy(bufout, readerCatted.(io.Reader))
|
||||
if 0 != bytes.Compare(bufout.Bytes(), data) {
|
||||
return errors.New("catted data does not match added data")
|
||||
}
|
||||
|
||||
@ -133,7 +133,7 @@ func RunThreeLeggedCat(data []byte, conf testutil.LatencyConfig) error {
|
||||
|
||||
// verify
|
||||
bufout := new(bytes.Buffer)
|
||||
io.Copy(bufout, readerCatted)
|
||||
io.Copy(bufout, readerCatted.(io.Reader))
|
||||
if 0 != bytes.Compare(bufout.Bytes(), data) {
|
||||
return errors.New("catted data does not match added data")
|
||||
}
|
||||
|
||||
@ -413,7 +413,7 @@ test_add_named_pipe() {
|
||||
test_expect_code 1 ipfs add named-pipe 2>actual &&
|
||||
STAT=$(generic_stat named-pipe) &&
|
||||
rm named-pipe &&
|
||||
grep "Error: Unrecognized file type for named-pipe: $STAT" actual &&
|
||||
grep "Error: unrecognized file type for named-pipe: $STAT" actual &&
|
||||
grep USAGE actual &&
|
||||
grep "ipfs add" actual
|
||||
'
|
||||
@ -423,7 +423,7 @@ test_add_named_pipe() {
|
||||
mkfifo named-pipe-dir/named-pipe &&
|
||||
STAT=$(generic_stat named-pipe-dir/named-pipe) &&
|
||||
test_expect_code 1 ipfs add -r named-pipe-dir 2>actual &&
|
||||
printf "Error:$err_prefix Unrecognized file type for named-pipe-dir/named-pipe: $STAT\n" >expected &&
|
||||
printf "Error:$err_prefix unrecognized file type for named-pipe-dir/named-pipe: $STAT\n" >expected &&
|
||||
rm named-pipe-dir/named-pipe &&
|
||||
rmdir named-pipe-dir &&
|
||||
test_cmp expected actual
|
||||
|
||||
Loading…
Reference in New Issue
Block a user