提交 9c6bf1a5 作者: Kevin Atkinson

Checkpoint.

License: MIT
Signed-off-by: 's avatarKevin Atkinson <k@kevina.org>
上级 85837e4a
......@@ -27,6 +27,7 @@ import (
humanize "gx/ipfs/QmPSBJL4momYnE7DcUyk2DVhD6rH488ZmHBGLbxNdhU44K/go-humanize"
mh "gx/ipfs/QmPnFwZ2JXKnXgMw8CdBPxn7FWh6LLdjUjxV1fKHuJnkr8/go-multihash"
offline "gx/ipfs/QmS6mo1dPpHdYsVkm27BRZDLxpKBCiJKUH8fHX15XFfMez/go-ipfs-exchange-offline"
mbase "gx/ipfs/QmSbvata2WqNkqGtZNg8MR3SKwnB8iQ7vTPJgWqB8bC5kR/go-multibase"
cid "gx/ipfs/QmYVNvtQkeZ6AKSwDrjQTs432QtL6umrrK41EBq3cu7iSP/go-cid"
ipld "gx/ipfs/QmZtNq8dArGfnpCZfx2pUNY7UcjGhVp5qqwQ4hH6mpTMRQ/go-ipld-format"
logging "gx/ipfs/QmcVVHfdyv15GVPk7NrxdWjh2hLVccXnoD8j2tyQShiXJb/go-log"
......@@ -128,6 +129,12 @@ var filesStatCmd = &cmds.Command{
withLocal, _ := req.Options["with-local"].(bool)
base, _, err := HandleCidBase(req, env)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
}
var dagserv ipld.DAGService
if withLocal {
// an offline DAGService will not fetch from the network
......@@ -145,7 +152,7 @@ var filesStatCmd = &cmds.Command{
return
}
o, err := statNode(nd)
o, err := statNode(nd, base)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
......@@ -217,7 +224,7 @@ func statGetFormatOptions(req *cmds.Request) (string, error) {
}
}
func statNode(nd ipld.Node) (*statOutput, error) {
func statNode(nd ipld.Node, base mbase.Encoder) (*statOutput, error) {
c := nd.Cid()
cumulsize, err := nd.Size()
......@@ -243,7 +250,7 @@ func statNode(nd ipld.Node) (*statOutput, error) {
}
return &statOutput{
Hash: c.String(),
Hash: c.Encode(base),
Blocks: len(nd.Links()),
Size: d.GetFilesize(),
CumulativeSize: cumulsize,
......@@ -251,7 +258,7 @@ func statNode(nd ipld.Node) (*statOutput, error) {
}, nil
case *dag.RawNode:
return &statOutput{
Hash: c.String(),
Hash: c.Encode(base),
Blocks: 0,
Size: cumulsize,
CumulativeSize: cumulsize,
......@@ -437,11 +444,13 @@ Examples:
long, _, _ := req.Option("l").Bool()
base, _, ctx, err := HandleCidBaseOld(req, req.Context())
switch fsn := fsn.(type) {
case *mfs.Directory:
if !long {
var output []mfs.NodeListing
names, err := fsn.ListNames(req.Context())
names, err := fsn.ListNames(ctx)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
......@@ -454,7 +463,7 @@ Examples:
}
res.SetOutput(&filesLsOutput{output})
} else {
listing, err := fsn.List(req.Context())
listing, err := fsn.List(ctx)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
......@@ -480,7 +489,7 @@ Examples:
res.SetError(err, cmdkit.ErrNormal)
return
}
out.Entries[0].Hash = nd.Cid().String()
out.Entries[0].Hash = nd.Cid().Encode(base)
}
res.SetOutput(out)
return
......
......@@ -9,6 +9,7 @@ import (
blockservice "github.com/ipfs/go-ipfs/blockservice"
cmds "github.com/ipfs/go-ipfs/commands"
core "github.com/ipfs/go-ipfs/core"
misc "github.com/ipfs/go-ipfs/core/misc"
e "github.com/ipfs/go-ipfs/core/commands/e"
merkledag "github.com/ipfs/go-ipfs/merkledag"
path "github.com/ipfs/go-ipfs/path"
......@@ -164,7 +165,7 @@ The JSON output contains type information.
t = d.GetType()
}
}
base := GetCidBase(ctx, paths[i])
base := misc.GetCidBase(ctx, paths[i])
output[i].Links[j] = LsLink{
Name: link.Name,
Hash: link.Cid.Encode(base),
......
......@@ -79,8 +79,14 @@ var addPinCmd = &cmds.Command{
}
showProgress, _, _ := req.Option("progress").Bool()
_, _, ctx, err := HandleCidBase(req, ctx)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
}
if !showProgress {
added, err := corerepo.Pin(n, req.Context(), req.Arguments(), recursive)
added, err := corerepo.Pin(n, ctx, req.Arguments(), recursive)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
......@@ -92,7 +98,7 @@ var addPinCmd = &cmds.Command{
out := make(chan interface{})
res.SetOutput((<-chan interface{})(out))
v := new(dag.ProgressTracker)
ctx := v.DeriveContext(req.Context())
ctx := v.DeriveContext(ctx)
type pinResult struct {
pins []*cid.Cid
......@@ -201,7 +207,7 @@ collected if needed. (By default, recursively. Use -r=false for direct pins.)
return
}
removed, err := corerepo.Unpin(n, req.Context(), req.Arguments(), recursive)
removed, err := corerepo.Unpin(n, ctx, req.Arguments(), recursive)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
......@@ -305,9 +311,9 @@ Example:
var keys map[string]RefKeyObject
if len(req.Arguments()) > 0 {
keys, err = pinLsKeys(req.Context(), req.Arguments(), typeStr, n)
keys, err = pinLsKeys(ctx, req.Arguments(), typeStr, n)
} else {
keys, err = pinLsAll(req.Context(), typeStr, n)
keys, err = pinLsAll(ctx, typeStr, n)
}
if err != nil {
......@@ -394,19 +400,19 @@ new pin and removing the old one.
ResolveOnce: uio.ResolveUnixfsOnce,
}
fromc, err := core.ResolveToCid(req.Context(), n.Namesys, r, from)
fromc, err := core.ResolveToCid(ctx, n.Namesys, r, from)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
}
toc, err := core.ResolveToCid(req.Context(), n.Namesys, r, to)
toc, err := core.ResolveToCid(ctx, n.Namesys, r, to)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
}
err = n.Pinning.Update(req.Context(), fromc, toc, unpin)
err = n.Pinning.Update(ctx, fromc, toc, unpin)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
......@@ -454,7 +460,7 @@ var verifyPinCmd = &cmds.Command{
explain: !quiet,
includeOk: verbose,
}
out := pinVerify(req.Context(), n, opts)
out := pinVerify(ctx, n, opts)
res.SetOutput(out)
},
......
......@@ -7,6 +7,7 @@ import (
"io"
"strings"
misc "github.com/ipfs/go-ipfs/core/misc"
cmds "github.com/ipfs/go-ipfs/commands"
"github.com/ipfs/go-ipfs/core"
e "github.com/ipfs/go-ipfs/core/commands/e"
......@@ -335,7 +336,7 @@ func (rw *RefWriter) WriteEdge(from, to *cid.Cid, linkname string) error {
}
}
base := GetCidBase(rw.Ctx, "")
base := misc.GetCidBase(rw.Ctx, "")
var s string
switch {
......
......@@ -9,6 +9,7 @@ import (
cmds "github.com/ipfs/go-ipfs/commands"
"github.com/ipfs/go-ipfs/core"
e "github.com/ipfs/go-ipfs/core/commands/e"
misc "github.com/ipfs/go-ipfs/core/misc"
ns "github.com/ipfs/go-ipfs/namesys"
nsopts "github.com/ipfs/go-ipfs/namesys/opts"
path "github.com/ipfs/go-ipfs/path"
......@@ -137,7 +138,7 @@ Resolve the value of an IPFS DAG path:
}
c := node.Cid()
base := GetCidBase(ctx, name)
base := misc.GetCidBase(ctx, name)
pathStr := "/ipfs/" + c.Encode(base)
res.SetOutput(&ResolvedPath{path.FromString(pathStr)})
......
......@@ -241,7 +241,7 @@ func HandleCidBase(req *cmds.Request, env cmds.Environment) (mbase.Encoder, bool
// HandleCidBaseFlagOld is like HandleCidBase but works with the old
// commands interface. Since it is not possible to change the context
// using this interface and new context is returned instead.
// using this interface a new context is returned instead.
func HandleCidBaseOld(req oldcmds.Request, ctx context.Context) (mbase.Encoder, bool, context.Context, error) {
baseStr, _, _ := req.Option("cid-base").String()
if baseStr != "" {
......@@ -255,25 +255,3 @@ func HandleCidBaseOld(req oldcmds.Request, ctx context.Context) (mbase.Encoder,
encoder, _ := mbase.NewEncoder(mbase.Base58BTC)
return encoder, false, ctx, nil
}
// GetCidBase gets the cid base to use from either the context or
// another cid or path
func GetCidBase(ctx context.Context, cidStr string) mbase.Encoder {
encoder, ok := ctx.Value("cid-base").(mbase.Encoder)
if ok {
return encoder
}
defaultEncoder, _ := mbase.NewEncoder(mbase.Base58BTC)
if cidStr != "" {
cidStr = strings.TrimPrefix(cidStr, "/ipfs/")
if cidStr == "" || strings.HasPrefix(cidStr, "Qm") {
return defaultEncoder
}
encoder, err := mbase.NewEncoder(mbase.Encoding(cidStr[0]))
if err != nil {
return defaultEncoder
}
return encoder
}
return defaultEncoder
}
package misc
import (
"context"
"strings"
mbase "gx/ipfs/QmSbvata2WqNkqGtZNg8MR3SKwnB8iQ7vTPJgWqB8bC5kR/go-multibase"
)
// GetCidBase gets the cid base to use from either the context or
// another cid or path
func GetCidBase(ctx context.Context, cidStr string) mbase.Encoder {
encoder, ok := ctx.Value("cid-base").(mbase.Encoder)
if ok {
return encoder
}
defaultEncoder, _ := mbase.NewEncoder(mbase.Base58BTC)
if cidStr != "" {
cidStr = strings.TrimPrefix(cidStr, "/ipfs/")
if cidStr == "" || strings.HasPrefix(cidStr, "Qm") {
return defaultEncoder
}
encoder, err := mbase.NewEncoder(mbase.Encoding(cidStr[0]))
if err != nil {
return defaultEncoder
}
return encoder
}
return defaultEncoder
}
......@@ -9,6 +9,7 @@ import (
"sync"
"time"
misc "github.com/ipfs/go-ipfs/core/misc"
dag "github.com/ipfs/go-ipfs/merkledag"
ft "github.com/ipfs/go-ipfs/unixfs"
uio "github.com/ipfs/go-ipfs/unixfs/io"
......@@ -261,6 +262,7 @@ func (d *Directory) List(ctx context.Context) ([]NodeListing, error) {
func (d *Directory) ForEachEntry(ctx context.Context, f func(NodeListing) error) error {
d.lock.Lock()
defer d.lock.Unlock()
base := misc.GetCidBase(ctx, "")
return d.unixfsDir.ForEachLink(ctx, func(l *ipld.Link) error {
c, err := d.childUnsync(l.Name)
if err != nil {
......@@ -275,7 +277,7 @@ func (d *Directory) ForEachEntry(ctx context.Context, f func(NodeListing) error)
child := NodeListing{
Name: l.Name,
Type: int(c.Type()),
Hash: nd.Cid().String(),
Hash: nd.Cid().Encode(base),
}
if c, ok := c.(*File); ok {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论