Skip to content

Commit

Permalink
Move --cid-base helpers to cmdenc package.
Browse files Browse the repository at this point in the history
License: MIT
Signed-off-by: Kevin Atkinson <k@kevina.org>
  • Loading branch information
kevina committed Sep 25, 2018
1 parent 1efd555 commit f5c2c22
Show file tree
Hide file tree
Showing 10 changed files with 110 additions and 95 deletions.
2 changes: 1 addition & 1 deletion core/commands/add.go
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ You can now check what blocks have been created by:
log.Warning("cannot determine size of input file")
}

_, err := NewCidBaseHandler(req).UseGlobal().Proc()
_, err := cmdenv.NewCidBaseHandler(req).UseGlobal().Proc()
if err != nil {
return err
}
Expand Down
87 changes: 87 additions & 0 deletions core/commands/cmdenv/cidbase.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package cmdenv

import (
oldcmds "github.com/ipfs/go-ipfs/commands"

cidenc "gx/ipfs/QmNWQygwYxgz3QzXG2ytTkrHkZ4HnnSh94ASox3JjktFcR/go-cidutil/cidenc"
cmds "gx/ipfs/QmPXR4tNdLbp8HsZiPMjpsgqphX9Vhw2J6Jh5MKH2ovW3D/go-ipfs-cmds"
cmdkit "gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit"
mbase "gx/ipfs/QmekxXDhCxCJRNuzmHreuaT3BsuJcsjcXWNrtV9C8DRHtd/go-multibase"
)

var OptionCidBase = cmdkit.StringOption("cid-base", "mbase", "Multi-base to use to encode version 1 CIDs in output.")
var OptionOutputCidV1 = cmdkit.BoolOption("output-cidv1", "Upgrade CID version 0 to version 1 in output.")

type CidBaseHandler struct {
base string
upgrade bool
upgradeDefined bool
args []string
enc *cidenc.Encoder
}

func NewCidBaseHandler(req *cmds.Request) *CidBaseHandler {
h := &CidBaseHandler{}
h.base, _ = req.Options["cid-base"].(string)
h.upgrade, h.upgradeDefined = req.Options["output-cidv1"].(bool)
h.args = req.Arguments
return h
}

func NewCidBaseHandlerLegacy(req oldcmds.Request) *CidBaseHandler {
h := &CidBaseHandler{}
h.base, _, _ = req.Option("cid-base").String()
h.upgrade, h.upgradeDefined, _ = req.Option("output-cidv1").Bool()
h.args = req.Arguments()
return h
}

func (h *CidBaseHandler) UseGlobal() *CidBaseHandler {
h.enc = &cidenc.Default
return h
}

func (h *CidBaseHandler) Proc() (*CidBaseHandler, error) {
var e cidenc.Encoder = cidenc.Default
if h.base != "" {
var err error
e.Base, err = mbase.EncoderByName(h.base)
if err != nil {
return h, err
}
}

e.Upgrade = h.upgrade
if h.base != "" && !h.upgradeDefined {
e.Upgrade = true
}

if h.enc == nil {
h.enc = &cidenc.Encoder{}
}
*h.enc = e
return h, nil
}

func (h *CidBaseHandler) Encoder() cidenc.Encoder {
return *h.enc
}

func (h *CidBaseHandler) EncoderFromPath(p string) cidenc.Encoder {
if h.base == "" {
enc, _ := cidenc.FromPath(*h.enc, p)
return enc
} else {
return *h.enc
}
}

func (h *CidBaseHandler) EncoderWithOverride() cidenc.Interface {
if h.base == "" {
enc := cidenc.NewOverride(*h.enc)
enc.Add(h.args...)
return enc
} else {
return *h.enc
}
}
4 changes: 2 additions & 2 deletions core/commands/files.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ var filesStatCmd = &cmds.Command{
},
Encoders: cmds.EncoderMap{
cmds.Text: cmds.MakeEncoder(func(req *cmds.Request, w io.Writer, v interface{}) error {
_, err := NewCidBaseHandler(req).UseGlobal().Proc()
_, err := cmdenv.NewCidBaseHandler(req).UseGlobal().Proc()
if err != nil {
return err
}
Expand Down Expand Up @@ -492,7 +492,7 @@ Examples:
},
Marshalers: oldcmds.MarshalerMap{
oldcmds.Text: func(res oldcmds.Response) (io.Reader, error) {
_, err := NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
_, err := cmdenv.NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
if err != nil {
return nil, err
}
Expand Down
6 changes: 3 additions & 3 deletions core/commands/filestore.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ The output is:
},
PostRun: cmds.PostRunMap{
cmds.CLI: func(res cmds.Response, re cmds.ResponseEmitter) error {
_, err := NewCidBaseHandler(res.Request()).UseGlobal().Proc()
_, err := cmdenv.NewCidBaseHandler(res.Request()).UseGlobal().Proc()
if err != nil {
return err
}
Expand Down Expand Up @@ -167,7 +167,7 @@ For ERROR entries the error will also be printed to stderr.
},
Marshalers: oldCmds.MarshalerMap{
oldCmds.Text: func(res oldCmds.Response) (io.Reader, error) {
_, err := NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
_, err := cmdenv.NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -208,7 +208,7 @@ var dupsFileStore = &oldCmds.Command{
return
}

h, err := NewCidBaseHandlerLegacy(req).Proc()
h, err := cmdenv.NewCidBaseHandlerLegacy(req).Proc()
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
Expand Down
3 changes: 2 additions & 1 deletion core/commands/ls.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

cmds "github.com/ipfs/go-ipfs/commands"
core "github.com/ipfs/go-ipfs/core"
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
e "github.com/ipfs/go-ipfs/core/commands/e"
unixfs "gx/ipfs/QmPL8bYtbACcSFFiSr4s2du7Na382NxRADR8hC7D9FkEA2/go-unixfs"
uio "gx/ipfs/QmPL8bYtbACcSFFiSr4s2du7Na382NxRADR8hC7D9FkEA2/go-unixfs/io"
Expand Down Expand Up @@ -173,7 +174,7 @@ The JSON output contains type information.
},
Marshalers: cmds.MarshalerMap{
cmds.Text: func(res cmds.Response) (io.Reader, error) {
_, err := NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
_, err := cmdenv.NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
if err != nil {
return nil, err
}
Expand Down
5 changes: 3 additions & 2 deletions core/commands/pin.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

cmds "github.com/ipfs/go-ipfs/commands"
core "github.com/ipfs/go-ipfs/core"
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
e "github.com/ipfs/go-ipfs/core/commands/e"
corerepo "github.com/ipfs/go-ipfs/core/corerepo"
pin "github.com/ipfs/go-ipfs/pin"
Expand Down Expand Up @@ -131,7 +132,7 @@ var addPinCmd = &cmds.Command{
},
Marshalers: cmds.MarshalerMap{
cmds.Text: func(res cmds.Response) (io.Reader, error) {
_, err := NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
_, err := cmdenv.NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -215,7 +216,7 @@ collected if needed. (By default, recursively. Use -r=false for direct pins.)
},
Marshalers: cmds.MarshalerMap{
cmds.Text: func(res cmds.Response) (io.Reader, error) {
_, err := NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
_, err := cmdenv.NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
if err != nil {
return nil, err
}
Expand Down
7 changes: 4 additions & 3 deletions core/commands/refs.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

cmds "github.com/ipfs/go-ipfs/commands"
"github.com/ipfs/go-ipfs/core"
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
e "github.com/ipfs/go-ipfs/core/commands/e"
cidenc "gx/ipfs/QmNWQygwYxgz3QzXG2ytTkrHkZ4HnnSh94ASox3JjktFcR/go-cidutil/cidenc"

Expand Down Expand Up @@ -118,7 +119,7 @@ NOTE: List all references recursively by using the flag '-r'.
format = "<src> -> <dst>"
}

h, err := NewCidBaseHandlerLegacy(req).Proc()
h, err := cmdenv.NewCidBaseHandlerLegacy(req).Proc()
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
Expand Down Expand Up @@ -178,7 +179,7 @@ Displays the hashes of all local objects.
return
}

h, err := NewCidBaseHandlerLegacy(req).Proc()
h, err := cmdenv.NewCidBaseHandlerLegacy(req).Proc()
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
Expand Down Expand Up @@ -213,7 +214,7 @@ Displays the hashes of all local objects.

var refsMarshallerMap = cmds.MarshalerMap{
cmds.Text: func(res cmds.Response) (io.Reader, error) {
_, err := NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
_, err := cmdenv.NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion core/commands/resolve.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ Resolve the value of an IPFS DAG path:
name := req.Arguments[0]
recursive, _ := req.Options["recursive"].(bool)

h, err := NewCidBaseHandler(req).Proc()
h, err := cmdenv.NewCidBaseHandler(req).Proc()
if err != nil {
return err
}
Expand Down
86 changes: 5 additions & 81 deletions core/commands/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,24 @@ import (

oldcmds "github.com/ipfs/go-ipfs/commands"
lgc "github.com/ipfs/go-ipfs/commands/legacy"
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
dag "github.com/ipfs/go-ipfs/core/commands/dag"
e "github.com/ipfs/go-ipfs/core/commands/e"
name "github.com/ipfs/go-ipfs/core/commands/name"
ocmd "github.com/ipfs/go-ipfs/core/commands/object"
unixfs "github.com/ipfs/go-ipfs/core/commands/unixfs"
cidenc "gx/ipfs/QmNWQygwYxgz3QzXG2ytTkrHkZ4HnnSh94ASox3JjktFcR/go-cidutil/cidenc"

"gx/ipfs/QmPXR4tNdLbp8HsZiPMjpsgqphX9Vhw2J6Jh5MKH2ovW3D/go-ipfs-cmds"
logging "gx/ipfs/QmRREK2CAZ5Re2Bd9zZFG6FeYDppUWt5cMgsoUEp3ktgSr/go-log"
"gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit"
mbase "gx/ipfs/QmekxXDhCxCJRNuzmHreuaT3BsuJcsjcXWNrtV9C8DRHtd/go-multibase"
)

var log = logging.Logger("core/commands")

var ErrNotOnline = errors.New("this command must be run in online mode. Try running 'ipfs daemon' first")

const (
ApiOption = "api"
CidBaseOption = "cid-base"
OutputCidV1Option = "output-cidv1"
ApiOption = "api"
)

var Root = &cmds.Command{
Expand Down Expand Up @@ -99,10 +96,11 @@ The CLI will exit with one of the following values:
cmdkit.BoolOption("h", "Show a short version of the command help text."),
cmdkit.BoolOption("local", "L", "Run the command locally, instead of using the daemon."),
cmdkit.StringOption(ApiOption, "Use a specific API instance (defaults to /ip4/127.0.0.1/tcp/5001)"),
cmdkit.StringOption(CidBaseOption, "mbase", "Multi-base to use to encode version 1 CIDs in output."),
cmdkit.BoolOption(OutputCidV1Option, "Upgrade CID version 0 to version 1 in output."),

// global options, added to every command
cmdenv.OptionCidBase,
cmdenv.OptionOutputCidV1,

cmds.OptionEncodingType,
cmds.OptionStreamChannels,
cmds.OptionTimeout,
Expand Down Expand Up @@ -228,77 +226,3 @@ func MessageTextMarshaler(res oldcmds.Response) (io.Reader, error) {

return strings.NewReader(out.Message), nil
}

type CidBaseHandler struct {
base string
upgrade bool
upgradeDefined bool
args []string
enc *cidenc.Encoder
}

func NewCidBaseHandler(req *cmds.Request) *CidBaseHandler {
h := &CidBaseHandler{}
h.base, _ = req.Options[CidBaseOption].(string)
h.upgrade, h.upgradeDefined = req.Options[OutputCidV1Option].(bool)
h.args = req.Arguments
return h
}

func NewCidBaseHandlerLegacy(req oldcmds.Request) *CidBaseHandler {
h := &CidBaseHandler{}
h.base, _, _ = req.Option(CidBaseOption).String()
h.upgrade, h.upgradeDefined, _ = req.Option(OutputCidV1Option).Bool()
h.args = req.Arguments()
return h
}

func (h *CidBaseHandler) UseGlobal() *CidBaseHandler {
h.enc = &cidenc.Default
return h
}

func (h *CidBaseHandler) Proc() (*CidBaseHandler, error) {
var e cidenc.Encoder = cidenc.Default
if h.base != "" {
var err error
e.Base, err = mbase.EncoderByName(h.base)
if err != nil {
return h, err
}
}

e.Upgrade = h.upgrade
if h.base != "" && !h.upgradeDefined {
e.Upgrade = true
}

if h.enc == nil {
h.enc = &cidenc.Encoder{}
}
*h.enc = e
return h, nil
}

func (h *CidBaseHandler) Encoder() cidenc.Encoder {
return *h.enc
}

func (h *CidBaseHandler) EncoderFromPath(p string) cidenc.Encoder {
if h.base == "" {
enc, _ := cidenc.FromPath(*h.enc, p)
return enc
} else {
return *h.enc
}
}

func (h *CidBaseHandler) EncoderWithOverride() cidenc.Interface {
if h.base == "" {
enc := cidenc.NewOverride(*h.enc)
enc.Add(h.args...)
return enc
} else {
return *h.enc
}
}
3 changes: 2 additions & 1 deletion core/commands/tar.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

cmds "github.com/ipfs/go-ipfs/commands"
core "github.com/ipfs/go-ipfs/core"
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
e "github.com/ipfs/go-ipfs/core/commands/e"
"github.com/ipfs/go-ipfs/core/coreunix"
tar "github.com/ipfs/go-ipfs/tar"
Expand Down Expand Up @@ -69,7 +70,7 @@ represent it.
Type: coreunix.AddedObject{},
Marshalers: cmds.MarshalerMap{
cmds.Text: func(res cmds.Response) (io.Reader, error) {
_, err := NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
_, err := cmdenv.NewCidBaseHandlerLegacy(res.Request()).UseGlobal().Proc()
if err != nil {
return nil, err
}
Expand Down

0 comments on commit f5c2c22

Please sign in to comment.