diff --git a/core/commands/add.go b/core/commands/add.go index 2d72b0af82d..8ccd2cbbe17 100644 --- a/core/commands/add.go +++ b/core/commands/add.go @@ -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 } diff --git a/core/commands/cmdenv/cidbase.go b/core/commands/cmdenv/cidbase.go new file mode 100644 index 00000000000..ab01057c169 --- /dev/null +++ b/core/commands/cmdenv/cidbase.go @@ -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 + } +} diff --git a/core/commands/files.go b/core/commands/files.go index dc1265acadb..07bbf377349 100644 --- a/core/commands/files.go +++ b/core/commands/files.go @@ -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 } @@ -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 } diff --git a/core/commands/filestore.go b/core/commands/filestore.go index fd5509e669d..f45fab745af 100644 --- a/core/commands/filestore.go +++ b/core/commands/filestore.go @@ -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 } @@ -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 } @@ -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 diff --git a/core/commands/ls.go b/core/commands/ls.go index d39ff0374bf..5f422aa8152 100644 --- a/core/commands/ls.go +++ b/core/commands/ls.go @@ -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" @@ -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 } diff --git a/core/commands/pin.go b/core/commands/pin.go index 22776de27a8..f9bfb376dbe 100644 --- a/core/commands/pin.go +++ b/core/commands/pin.go @@ -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" @@ -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 } @@ -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 } diff --git a/core/commands/refs.go b/core/commands/refs.go index 4088b09b4b6..b75a4afe084 100644 --- a/core/commands/refs.go +++ b/core/commands/refs.go @@ -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" @@ -118,7 +119,7 @@ NOTE: List all references recursively by using the flag '-r'. format = " -> " } - h, err := NewCidBaseHandlerLegacy(req).Proc() + h, err := cmdenv.NewCidBaseHandlerLegacy(req).Proc() if err != nil { res.SetError(err, cmdkit.ErrNormal) return @@ -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 @@ -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 } diff --git a/core/commands/resolve.go b/core/commands/resolve.go index 451cdb9cffe..dddc7e71fb5 100644 --- a/core/commands/resolve.go +++ b/core/commands/resolve.go @@ -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 } diff --git a/core/commands/root.go b/core/commands/root.go index ffc188271af..419aa5318dc 100644 --- a/core/commands/root.go +++ b/core/commands/root.go @@ -7,17 +7,16 @@ 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") @@ -25,9 +24,7 @@ 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{ @@ -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, @@ -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 - } -} diff --git a/core/commands/tar.go b/core/commands/tar.go index d1a6d2d68c9..1eb405cf223 100644 --- a/core/commands/tar.go +++ b/core/commands/tar.go @@ -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" @@ -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 }