From b2badfbb068867980fc389ae70f80c8fd9da2648 Mon Sep 17 00:00:00 2001 From: Overbool Date: Fri, 26 Oct 2018 22:37:33 +0800 Subject: [PATCH 1/8] refactor(cmds): use new cmds lib in diag License: MIT Signed-off-by: Overbool --- core/commands/active.go | 73 +++++++++++++++++----------------------- core/commands/diag.go | 5 ++- core/commands/root.go | 2 +- core/commands/sysdiag.go | 29 +++++++--------- 4 files changed, 46 insertions(+), 63 deletions(-) diff --git a/core/commands/active.go b/core/commands/active.go index dd1128ba8..b0197d442 100644 --- a/core/commands/active.go +++ b/core/commands/active.go @@ -1,17 +1,15 @@ package commands import ( - "bytes" "fmt" "io" "sort" "text/tabwriter" "time" - cmds "github.com/ipfs/go-ipfs/commands" - e "github.com/ipfs/go-ipfs/core/commands/e" - - "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" + oldcmds "github.com/ipfs/go-ipfs/commands" + cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" + cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) const ( @@ -25,8 +23,9 @@ var ActiveReqsCmd = &cmds.Command{ Lists running and recently run commands. `, }, - Run: func(req cmds.Request, res cmds.Response) { - res.SetOutput(req.InvocContext().ReqLog.Report()) + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + ctx := env.(*oldcmds.Context) + return res.Emit(ctx.ReqLog.Report()) }, Options: []cmdkit.Option{ cmdkit.BoolOption("verbose", verboseOptionName, "Print extra information."), @@ -35,38 +34,27 @@ Lists running and recently run commands. "clear": clearInactiveCmd, "set-time": setRequestClearCmd, }, - Marshalers: map[cmds.EncodingType]cmds.Marshaler{ - cmds.Text: func(res cmds.Response) (io.Reader, error) { - v, err := unwrapOutput(res.Output()) - if err != nil { - return nil, err - } + Encoders: cmds.EncoderMap { + cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *[]*cmds.ReqLogEntry) error { + verbose, _ := req.Options[verboseOptionName].(bool) - out, ok := v.(*[]*cmds.ReqLogEntry) - if !ok { - return nil, e.TypeErr(out, v) - } - buf := new(bytes.Buffer) - - verbose, _, _ := res.Request().Option(verboseOptionName).Bool() - - w := tabwriter.NewWriter(buf, 4, 4, 2, ' ', 0) + tw := tabwriter.NewWriter(w, 4, 4, 2, ' ', 0) if verbose { - fmt.Fprint(w, "ID\t") + fmt.Fprint(tw, "ID\t") } - fmt.Fprint(w, "Command\t") + fmt.Fprint(tw, "Command\t") if verbose { - fmt.Fprint(w, "Arguments\tOptions\t") + fmt.Fprint(tw, "Arguments\tOptions\t") } - fmt.Fprintln(w, "Active\tStartTime\tRunTime") + fmt.Fprintln(tw, "Active\tStartTime\tRunTime") for _, req := range *out { if verbose { - fmt.Fprintf(w, "%d\t", req.ID) + fmt.Fprintf(tw, "%d\t", req.ID) } - fmt.Fprintf(w, "%s\t", req.Command) + fmt.Fprintf(tw, "%s\t", req.Command) if verbose { - fmt.Fprintf(w, "%v\t[", req.Args) + fmt.Fprintf(tw, "%v\t[", req.Args) var keys []string for k := range req.Options { keys = append(keys, k) @@ -74,9 +62,9 @@ Lists running and recently run commands. sort.Strings(keys) for _, k := range keys { - fmt.Fprintf(w, "%s=%v,", k, req.Options[k]) + fmt.Fprintf(tw, "%s=%v,", k, req.Options[k]) } - fmt.Fprintf(w, "]\t") + fmt.Fprintf(tw, "]\t") } var live time.Duration @@ -88,10 +76,8 @@ Lists running and recently run commands. t := req.StartTime.Format(time.Stamp) fmt.Fprintf(w, "%t\t%s\t%s\n", req.Active, t, live) } - w.Flush() - - return buf, nil - }, + return tw.Flush() + }), }, Type: []*cmds.ReqLogEntry{}, } @@ -100,8 +86,10 @@ var clearInactiveCmd = &cmds.Command{ Helptext: cmdkit.HelpText{ Tagline: "Clear inactive requests from the log.", }, - Run: func(req cmds.Request, res cmds.Response) { - req.InvocContext().ReqLog.ClearInactive() + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + ctx := env.(*oldcmds.Context) + ctx.ReqLog.ClearInactive() + return nil }, } @@ -112,13 +100,14 @@ var setRequestClearCmd = &cmds.Command{ Arguments: []cmdkit.Argument{ cmdkit.StringArg("time", true, false, "Time to keep inactive requests in log."), }, - Run: func(req cmds.Request, res cmds.Response) { - tval, err := time.ParseDuration(req.Arguments()[0]) + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + tval, err := time.ParseDuration(req.Arguments[0]) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } + ctx := env.(*oldcmds.Context) + ctx.ReqLog.SetKeepTime(tval) - req.InvocContext().ReqLog.SetKeepTime(tval) + return nil }, } diff --git a/core/commands/diag.go b/core/commands/diag.go index 4f9c6e48d..f6f14b839 100644 --- a/core/commands/diag.go +++ b/core/commands/diag.go @@ -1,9 +1,8 @@ package commands import ( - cmds "github.com/ipfs/go-ipfs/commands" - - "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" + cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" + cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) var DiagCmd = &cmds.Command{ diff --git a/core/commands/root.go b/core/commands/root.go index 01d33a3d3..1e9afe2ea 100644 --- a/core/commands/root.go +++ b/core/commands/root.go @@ -126,7 +126,7 @@ var rootSubcommands = map[string]*cmds.Command{ "config": lgc.NewCommand(ConfigCmd), "dag": dag.DagCmd, "dht": DhtCmd, - "diag": lgc.NewCommand(DiagCmd), + "diag": DiagCmd, "dns": DNSCmd, "id": IDCmd, "key": KeyCmd, diff --git a/core/commands/sysdiag.go b/core/commands/sysdiag.go index 7fb4465ce..62913e9c0 100644 --- a/core/commands/sysdiag.go +++ b/core/commands/sysdiag.go @@ -5,9 +5,10 @@ import ( "path" "runtime" + cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv" version "github.com/ipfs/go-ipfs" - cmds "github.com/ipfs/go-ipfs/commands" + cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" manet "gx/ipfs/QmQVUtnrNGtCRkCMpXgpApfzQjc8FDaDVxHqWH8cnZQeh5/go-multiaddr-net" sysi "gx/ipfs/QmZRjKbHa6DenStpQJFiaPcEwkZqrx7TH6xTf342LDU3qM/go-sysinfo" "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" @@ -20,46 +21,40 @@ var sysDiagCmd = &cmds.Command{ Prints out information about your computer to aid in easier debugging. `, }, - Run: func(req cmds.Request, res cmds.Response) { + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { info := make(map[string]interface{}) err := runtimeInfo(info) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } err = envVarInfo(info) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } err = diskSpaceInfo(info) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } err = memInfo(info) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } - node, err := req.InvocContext().GetNode() + nd, err := cmdenv.GetNode(env) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } - err = netInfo(node.OnlineMode(), info) + err = netInfo(nd.OnlineMode(), info) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } info["ipfs_version"] = version.CurrentVersionNumber info["ipfs_commit"] = version.CurrentCommit - res.SetOutput(info) + return res.Emit(info) }, } From b1efb997bfa95bacf8920498346d1ba1b4b2d869 Mon Sep 17 00:00:00 2001 From: Overbool Date: Fri, 26 Oct 2018 22:52:55 +0800 Subject: [PATCH 2/8] refactor(cmds): use new cmds lib in config License: MIT Signed-off-by: Overbool --- core/commands/active.go | 2 +- core/commands/config.go | 214 ++++++++++++++------------------------- core/commands/root.go | 2 +- core/commands/sysdiag.go | 2 +- 4 files changed, 77 insertions(+), 143 deletions(-) diff --git a/core/commands/active.go b/core/commands/active.go index b0197d442..fffdc4f60 100644 --- a/core/commands/active.go +++ b/core/commands/active.go @@ -34,7 +34,7 @@ Lists running and recently run commands. "clear": clearInactiveCmd, "set-time": setRequestClearCmd, }, - Encoders: cmds.EncoderMap { + Encoders: cmds.EncoderMap{ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *[]*cmds.ReqLogEntry) error { verbose, _ := req.Options[verboseOptionName].(bool) diff --git a/core/commands/config.go b/core/commands/config.go index 422929932..b495b8620 100644 --- a/core/commands/config.go +++ b/core/commands/config.go @@ -1,7 +1,6 @@ package commands import ( - "bytes" "encoding/json" "errors" "fmt" @@ -11,11 +10,11 @@ import ( "os/exec" "strings" - cmds "github.com/ipfs/go-ipfs/commands" - e "github.com/ipfs/go-ipfs/core/commands/e" + oldcmds "github.com/ipfs/go-ipfs/commands" repo "github.com/ipfs/go-ipfs/repo" fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo" + cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" "gx/ipfs/QmP2i47tnU23ijdshrZtuvrSkQPtf9HhsMb9fwGVe8owj2/jsondiff" config "gx/ipfs/QmbK4EmM2Xx5fmbqK38TGP3PpY66r3tkXLZTcc7dF9mFwM/go-ipfs-config" "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" @@ -60,7 +59,12 @@ Set the value of the 'Datastore.Path' key: $ ipfs config Datastore.Path ~/.ipfs/datastore `, }, - + Subcommands: map[string]*cmds.Command{ + "show": configShowCmd, + "edit": configEditCmd, + "replace": configReplaceCmd, + "profile": configProfileCmd, + }, Arguments: []cmdkit.Argument{ cmdkit.StringArg("key", true, false, "The key of the config entry (e.g. \"Addresses.API\")."), cmdkit.StringArg("value", false, false, "The value to set the config entry to."), @@ -69,46 +73,37 @@ Set the value of the 'Datastore.Path' key: cmdkit.BoolOption(configBoolOptionName, "Set a boolean value."), cmdkit.BoolOption(configJSONOptionName, "Parse stringified JSON."), }, - Run: func(req cmds.Request, res cmds.Response) { - args := req.Arguments() + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + args := req.Arguments key := args[0] var output *ConfigField - defer func() { - if output != nil { - res.SetOutput(output) - } else { - res.SetOutput(nil) - } - }() // This is a temporary fix until we move the private key out of the config file switch strings.ToLower(key) { case "identity", "identity.privkey": - res.SetError(fmt.Errorf("cannot show or change private key through API"), cmdkit.ErrNormal) - return + return fmt.Errorf("cannot show or change private key through API") default: } - r, err := fsrepo.Open(req.InvocContext().ConfigRoot) + ctx := env.(*oldcmds.Context) + r, err := fsrepo.Open(ctx.ConfigRoot) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } defer r.Close() if len(args) == 2 { value := args[1] - if parseJSON, _, _ := req.Option(configJSONOptionName).Bool(); parseJSON { + if parseJSON, _ := req.Options[configJSONOptionName].(bool); parseJSON { var jsonVal interface{} if err := json.Unmarshal([]byte(value), &jsonVal); err != nil { err = fmt.Errorf("failed to unmarshal json. %s", err) - res.SetError(err, cmdkit.ErrNormal) - return + return err } output, err = setConfig(r, key, jsonVal) - } else if isbool, _, _ := req.Option(configBoolOptionName).Bool(); isbool { + } else if isbool, _ := req.Options[configBoolOptionName].(bool); isbool { output, err = setConfig(r, key, value == "true") } else { output, err = setConfig(r, key, value) @@ -116,46 +111,28 @@ Set the value of the 'Datastore.Path' key: } else { output, err = getConfig(r, key) } + if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } + + return res.Emit(output) }, - Marshalers: cmds.MarshalerMap{ - cmds.Text: func(res cmds.Response) (io.Reader, error) { - if len(res.Request().Arguments()) == 2 { - return nil, nil // dont output anything + Encoders: cmds.EncoderMap{ + cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *ConfigField) error { + if len(req.Arguments) == 2 { + return nil } - if res.Error() != nil { - return nil, res.Error() - } - - v, err := unwrapOutput(res.Output()) + buf, err := config.HumanOutput(out.Value) if err != nil { - return nil, err + return err } - - vf, ok := v.(*ConfigField) - if !ok { - return nil, e.TypeErr(vf, v) - } - - buf, err := config.HumanOutput(vf.Value) - if err != nil { - return nil, err - } - buf = append(buf, byte('\n')) - return bytes.NewReader(buf), nil - }, + fmt.Fprintln(w, string(buf)) + return nil + }), }, Type: ConfigField{}, - Subcommands: map[string]*cmds.Command{ - "show": configShowCmd, - "edit": configEditCmd, - "replace": configReplaceCmd, - "profile": configProfileCmd, - }, } var configShowCmd = &cmds.Command{ @@ -166,57 +143,41 @@ NOTE: For security reasons, this command will omit your private key. If you woul `, }, Type: map[string]interface{}{}, - Run: func(req cmds.Request, res cmds.Response) { - cfgPath := req.InvocContext().ConfigRoot + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + ctx := env.(*oldcmds.Context) + cfgPath := ctx.ConfigRoot fname, err := config.Filename(cfgPath) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } data, err := ioutil.ReadFile(fname) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } var cfg map[string]interface{} err = json.Unmarshal(data, &cfg) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } err = scrubValue(cfg, []string{config.IdentityTag, config.PrivKeyTag}) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } - res.SetOutput(&cfg) + + return res.Emit(&cfg) }, - Marshalers: cmds.MarshalerMap{ - cmds.Text: func(res cmds.Response) (io.Reader, error) { - if res.Error() != nil { - return nil, res.Error() - } - - v, err := unwrapOutput(res.Output()) + Encoders: cmds.EncoderMap{ + cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *map[string]interface{}) error { + buf, err := config.HumanOutput(out) if err != nil { - return nil, err + return err } - - cfg, ok := v.(*map[string]interface{}) - if !ok { - return nil, e.TypeErr(cfg, v) - } - - buf, err := config.HumanOutput(cfg) - if err != nil { - return nil, err - } - buf = append(buf, byte('\n')) - return bytes.NewReader(buf), nil - }, + fmt.Fprintln(w, string(buf)) + return nil + }), }, } @@ -270,17 +231,14 @@ variable set to your preferred text editor. `, }, - Run: func(req cmds.Request, res cmds.Response) { - filename, err := config.Filename(req.InvocContext().ConfigRoot) + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + ctx := env.(*oldcmds.Context) + filename, err := config.Filename(ctx.ConfigRoot) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } - err = editConfig(filename) - if err != nil { - res.SetError(err, cmdkit.ErrNormal) - } + return editConfig(filename) }, } @@ -296,29 +254,21 @@ can't be undone. Arguments: []cmdkit.Argument{ cmdkit.FileArg("file", true, false, "The file to use as the new config."), }, - Run: func(req cmds.Request, res cmds.Response) { - // has to be called - res.SetOutput(nil) - - r, err := fsrepo.Open(req.InvocContext().ConfigRoot) + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + ctx := env.(*oldcmds.Context) + r, err := fsrepo.Open(ctx.ConfigRoot) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } defer r.Close() - file, err := req.Files().NextFile() + file, err := req.Files.NextFile() if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } defer file.Close() - err = replaceConfig(r, file) - if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return - } + return replaceConfig(r, file) }, } @@ -346,58 +296,42 @@ var configProfileApplyCmd = &cmds.Command{ Arguments: []cmdkit.Argument{ cmdkit.StringArg("profile", true, false, "The profile to apply to the config."), }, - Run: func(req cmds.Request, res cmds.Response) { - profile, ok := config.Profiles[req.Arguments()[0]] + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + profile, ok := config.Profiles[req.Arguments[0]] if !ok { - res.SetError(fmt.Errorf("%s is not a profile", req.Arguments()[0]), cmdkit.ErrNormal) - return + return fmt.Errorf("%s is not a profile", req.Arguments[0]) } - dryRun, _, _ := req.Option("dry-run").Bool() - oldCfg, newCfg, err := transformConfig(req.InvocContext().ConfigRoot, req.Arguments()[0], profile.Transform, dryRun) + dryRun, _ := req.Options["dry-run"].(bool) + ctx := env.(*oldcmds.Context) + oldCfg, newCfg, err := transformConfig(ctx.ConfigRoot, req.Arguments[0], profile.Transform, dryRun) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } oldCfgMap, err := scrubPrivKey(oldCfg) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } newCfgMap, err := scrubPrivKey(newCfg) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } - res.SetOutput(&ConfigUpdateOutput{ + return res.Emit(&ConfigUpdateOutput{ OldCfg: oldCfgMap, NewCfg: newCfgMap, }) }, - Marshalers: cmds.MarshalerMap{ - cmds.Text: func(res cmds.Response) (io.Reader, error) { - if res.Error() != nil { - return nil, res.Error() - } - - v, err := unwrapOutput(res.Output()) - if err != nil { - return nil, err - } - - apply, ok := v.(*ConfigUpdateOutput) - if !ok { - return nil, e.TypeErr(apply, v) - } - - diff := jsondiff.Compare(apply.OldCfg, apply.NewCfg) + Encoders: cmds.EncoderMap{ + cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *ConfigUpdateOutput) error { + diff := jsondiff.Compare(out.OldCfg, out.NewCfg) buf := jsondiff.Format(diff) - return strings.NewReader(string(buf)), nil - }, + fmt.Fprint(w, string(buf)) + return nil + }), }, Type: ConfigUpdateOutput{}, } diff --git a/core/commands/root.go b/core/commands/root.go index 1e9afe2ea..b9ec0297f 100644 --- a/core/commands/root.go +++ b/core/commands/root.go @@ -123,7 +123,7 @@ var rootSubcommands = map[string]*cmds.Command{ "repo": RepoCmd, "stats": StatsCmd, "bootstrap": lgc.NewCommand(BootstrapCmd), - "config": lgc.NewCommand(ConfigCmd), + "config": ConfigCmd, "dag": dag.DagCmd, "dht": DhtCmd, "diag": DiagCmd, diff --git a/core/commands/sysdiag.go b/core/commands/sysdiag.go index 62913e9c0..05faf700e 100644 --- a/core/commands/sysdiag.go +++ b/core/commands/sysdiag.go @@ -5,8 +5,8 @@ import ( "path" "runtime" - cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv" version "github.com/ipfs/go-ipfs" + cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv" cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" manet "gx/ipfs/QmQVUtnrNGtCRkCMpXgpApfzQjc8FDaDVxHqWH8cnZQeh5/go-multiaddr-net" From 27bc0ecc2e691c353e3f2bbe75bfcf83efa3c8f6 Mon Sep 17 00:00:00 2001 From: Overbool Date: Fri, 26 Oct 2018 23:43:07 +0800 Subject: [PATCH 3/8] refactor(cmds): use new cmds lib in mount License: MIT Signed-off-by: Overbool --- core/commands/mount_unix.go | 64 ++++++++++++------------------------- core/commands/root.go | 2 +- 2 files changed, 22 insertions(+), 44 deletions(-) diff --git a/core/commands/mount_unix.go b/core/commands/mount_unix.go index 8a8b695a4..a20ea29dc 100644 --- a/core/commands/mount_unix.go +++ b/core/commands/mount_unix.go @@ -5,12 +5,11 @@ package commands import ( "fmt" "io" - "strings" - cmds "github.com/ipfs/go-ipfs/commands" - e "github.com/ipfs/go-ipfs/core/commands/e" + cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv" nodeMount "github.com/ipfs/go-ipfs/fuse/node" + config "gx/ipfs/QmPEpj17FDRpc7K1aArKZp3RsHtzRMKykeK9GVgn4WQGPR/go-ipfs-config" config "gx/ipfs/QmbK4EmM2Xx5fmbqK38TGP3PpY66r3tkXLZTcc7dF9mFwM/go-ipfs-config" "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) @@ -76,71 +75,50 @@ baz cmdkit.StringOption("ipfs-path", "f", "The path where IPFS should be mounted."), cmdkit.StringOption("ipns-path", "n", "The path where IPNS should be mounted."), }, - Run: func(req cmds.Request, res cmds.Response) { - cfg, err := req.InvocContext().GetConfig() + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + cfg, err := cmdenv.GetConfig(env) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } - node, err := req.InvocContext().GetNode() + nd, err := cmdenv.GetNode(env) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } // error if we aren't running node in online mode - if node.LocalMode() { - res.SetError(ErrNotOnline, cmdkit.ErrClient) - return + if nd.LocalMode() { + return err } - fsdir, found, err := req.Option("f").String() - if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return - } + fsdir, found := req.Options["f"].(string) if !found { fsdir = cfg.Mounts.IPFS // use default value } // get default mount points - nsdir, found, err := req.Option("n").String() - if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return - } + nsdir, found := req.Options["n"].(string) if !found { nsdir = cfg.Mounts.IPNS // NB: be sure to not redeclare! } - err = nodeMount.Mount(node, fsdir, nsdir) + err = nodeMount.Mount(nd, fsdir, nsdir) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } var output config.Mounts output.IPFS = fsdir output.IPNS = nsdir - res.SetOutput(&output) + return res.Emit(&output) }, Type: config.Mounts{}, - Marshalers: cmds.MarshalerMap{ - cmds.Text: func(res cmds.Response) (io.Reader, error) { - v, err := unwrapOutput(res.Output()) - if err != nil { - return nil, err - } - - mnts, ok := v.(*config.Mounts) - if !ok { - return nil, e.TypeErr(mnts, v) - } - - s := fmt.Sprintf("IPFS mounted at: %s\n", mnts.IPFS) - s += fmt.Sprintf("IPNS mounted at: %s\n", mnts.IPNS) - return strings.NewReader(s), nil - }, + Encoders: cmds.EncoderMap{ + cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, mounts *config.Mounts) error { + s := fmt.Sprintf("IPFS mounted at: %s\n", mounts.IPFS) + s += fmt.Sprintf("IPNS mounted at: %s\n", mounts.IPNS) + fmt.Fprint(w, s) + return nil + }), }, } diff --git a/core/commands/root.go b/core/commands/root.go index b9ec0297f..50434b36f 100644 --- a/core/commands/root.go +++ b/core/commands/root.go @@ -132,7 +132,7 @@ var rootSubcommands = map[string]*cmds.Command{ "key": KeyCmd, "log": lgc.NewCommand(LogCmd), "ls": lgc.NewCommand(LsCmd), - "mount": lgc.NewCommand(MountCmd), + "mount": MountCmd, "name": name.NameCmd, "object": ocmd.ObjectCmd, "pin": lgc.NewCommand(PinCmd), From 35959d623bd8111c9da5bee718ed9faabf3d5ac9 Mon Sep 17 00:00:00 2001 From: Overbool Date: Fri, 26 Oct 2018 23:54:30 +0800 Subject: [PATCH 4/8] refactor(cmds): use new cmds lib in log License: MIT Signed-off-by: Overbool --- core/commands/log.go | 63 +++++++++++++--------------------- core/commands/mount_nofuse.go | 5 ++- core/commands/mount_windows.go | 3 +- core/commands/root.go | 2 +- 4 files changed, 27 insertions(+), 46 deletions(-) diff --git a/core/commands/log.go b/core/commands/log.go index 83c54375c..2434c007b 100644 --- a/core/commands/log.go +++ b/core/commands/log.go @@ -1,16 +1,13 @@ package commands import ( - "bytes" "fmt" "io" - cmds "github.com/ipfs/go-ipfs/commands" - e "github.com/ipfs/go-ipfs/core/commands/e" - + cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log" lwriter "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log/writer" - "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" + cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) // Golang os.Args overrides * and replaces the character argument with @@ -52,9 +49,8 @@ the event log. One of: debug, info, warning, error, critical. `), }, - Run: func(req cmds.Request, res cmds.Response) { - - args := req.Arguments() + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + args := req.Arguments subsystem, level := args[0], args[1] if subsystem == logAllKeyword { @@ -62,16 +58,18 @@ the event log. } if err := logging.SetLogLevel(subsystem, level); err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } s := fmt.Sprintf("Changed log level of '%s' to '%s'\n", subsystem, level) log.Info(s) - res.SetOutput(&MessageOutput{s}) + return res.Emit(&MessageOutput{s}) }, - Marshalers: cmds.MarshalerMap{ - cmds.Text: MessageTextMarshaler, + Encoders: cmds.EncoderMap{ + cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *MessageOutput) error { + fmt.Fprint(w, out.Message) + return nil + }), }, Type: MessageOutput{}, } @@ -84,11 +82,16 @@ var logLsCmd = &cmds.Command{ subsystems of a running daemon. `, }, - Run: func(req cmds.Request, res cmds.Response) { - res.SetOutput(&stringList{logging.GetSubsystems()}) + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + return res.Emit(&stringList{logging.GetSubsystems()}) }, - Marshalers: cmds.MarshalerMap{ - cmds.Text: stringListMarshaler, + Encoders: cmds.EncoderMap{ + cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, list *stringList) error { + for _, s := range list.Strings { + fmt.Fprintln(w, s) + } + return nil + }), }, Type: stringList{}, } @@ -101,34 +104,14 @@ Outputs event log messages (not other log messages) as they are generated. `, }, - Run: func(req cmds.Request, res cmds.Response) { - ctx := req.Context() + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + ctx := req.Context r, w := io.Pipe() go func() { defer w.Close() <-ctx.Done() }() lwriter.WriterGroup.AddWriter(w) - res.SetOutput(r) + return res.Emit(r) }, } - -func stringListMarshaler(res cmds.Response) (io.Reader, error) { - v, err := unwrapOutput(res.Output()) - if err != nil { - return nil, err - } - - list, ok := v.(*stringList) - if !ok { - return nil, e.TypeErr(list, v) - } - - buf := new(bytes.Buffer) - for _, s := range list.Strings { - buf.WriteString(s) - buf.WriteString("\n") - } - - return buf, nil -} diff --git a/core/commands/mount_nofuse.go b/core/commands/mount_nofuse.go index 8e67a7cd1..8b21729c7 100644 --- a/core/commands/mount_nofuse.go +++ b/core/commands/mount_nofuse.go @@ -3,9 +3,8 @@ package commands import ( - cmds "github.com/ipfs/go-ipfs/commands" - - "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" + cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" + cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) var MountCmd = &cmds.Command{ diff --git a/core/commands/mount_windows.go b/core/commands/mount_windows.go index 9114ba9c4..1840dea1c 100644 --- a/core/commands/mount_windows.go +++ b/core/commands/mount_windows.go @@ -3,8 +3,7 @@ package commands import ( "errors" - cmds "github.com/ipfs/go-ipfs/commands" - + cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) diff --git a/core/commands/root.go b/core/commands/root.go index 50434b36f..654b0b727 100644 --- a/core/commands/root.go +++ b/core/commands/root.go @@ -130,7 +130,7 @@ var rootSubcommands = map[string]*cmds.Command{ "dns": DNSCmd, "id": IDCmd, "key": KeyCmd, - "log": lgc.NewCommand(LogCmd), + "log": LogCmd, "ls": lgc.NewCommand(LsCmd), "mount": MountCmd, "name": name.NameCmd, From d26f97a90293bfea1db208eb3f7d8077297311c2 Mon Sep 17 00:00:00 2001 From: Overbool Date: Sat, 27 Oct 2018 00:55:03 +0800 Subject: [PATCH 5/8] fix(cmd/diag): inorder output License: MIT Signed-off-by: Overbool --- core/commands/active.go | 16 ++++++++++++---- core/commands/diag.go | 2 +- core/commands/mount_nofuse.go | 2 +- core/commands/mount_windows.go | 6 +++--- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/core/commands/active.go b/core/commands/active.go index fffdc4f60..4fada6f13 100644 --- a/core/commands/active.go +++ b/core/commands/active.go @@ -1,6 +1,7 @@ package commands import ( + "bytes" "fmt" "io" "sort" @@ -8,7 +9,8 @@ import ( "time" oldcmds "github.com/ipfs/go-ipfs/commands" - cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" + + cmds "gx/ipfs/QmdTmGruUz23vgzym3uWpnAEQdGdGifQqBvP8UXSRjG8gZ/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) @@ -38,7 +40,9 @@ Lists running and recently run commands. cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *[]*cmds.ReqLogEntry) error { verbose, _ := req.Options[verboseOptionName].(bool) - tw := tabwriter.NewWriter(w, 4, 4, 2, ' ', 0) + buf := new(bytes.Buffer) + + tw := tabwriter.NewWriter(buf, 4, 4, 2, ' ', 0) if verbose { fmt.Fprint(tw, "ID\t") } @@ -74,9 +78,13 @@ Lists running and recently run commands. live = req.EndTime.Sub(req.StartTime) } t := req.StartTime.Format(time.Stamp) - fmt.Fprintf(w, "%t\t%s\t%s\n", req.Active, t, live) + fmt.Fprintf(tw, "%t\t%s\t%s\n", req.Active, t, live) } - return tw.Flush() + tw.Flush() + + fmt.Fprint(w, buf) + + return nil }), }, Type: []*cmds.ReqLogEntry{}, diff --git a/core/commands/diag.go b/core/commands/diag.go index f6f14b839..b456b1f08 100644 --- a/core/commands/diag.go +++ b/core/commands/diag.go @@ -1,7 +1,7 @@ package commands import ( - cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" + cmds "gx/ipfs/QmdTmGruUz23vgzym3uWpnAEQdGdGifQqBvP8UXSRjG8gZ/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) diff --git a/core/commands/mount_nofuse.go b/core/commands/mount_nofuse.go index 8b21729c7..db31b91d7 100644 --- a/core/commands/mount_nofuse.go +++ b/core/commands/mount_nofuse.go @@ -3,7 +3,7 @@ package commands import ( - cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" + cmds "gx/ipfs/QmdTmGruUz23vgzym3uWpnAEQdGdGifQqBvP8UXSRjG8gZ/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) diff --git a/core/commands/mount_windows.go b/core/commands/mount_windows.go index 1840dea1c..3f99e86e1 100644 --- a/core/commands/mount_windows.go +++ b/core/commands/mount_windows.go @@ -3,7 +3,7 @@ package commands import ( "errors" - cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" + cmds "gx/ipfs/QmdTmGruUz23vgzym3uWpnAEQdGdGifQqBvP8UXSRjG8gZ/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) @@ -13,7 +13,7 @@ var MountCmd = &cmds.Command{ ShortDescription: "Not yet implemented on Windows. :(", }, - Run: func(req cmds.Request, res cmds.Response) { - res.SetError(errors.New("Mount isn't compatible with Windows yet"), cmdkit.ErrNormal) + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + return errors.New("Mount isn't compatible with Windows yet") }, } From 46902e98e23308371683ac2c9d402384039ba830 Mon Sep 17 00:00:00 2001 From: Overbool Date: Sat, 27 Oct 2018 13:54:49 +0800 Subject: [PATCH 6/8] commands: use io.Writer in tabwriter License: MIT Signed-off-by: Overbool --- core/commands/active.go | 9 ++------- core/commands/diag.go | 2 +- core/commands/mount_nofuse.go | 2 +- core/commands/mount_windows.go | 2 +- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/core/commands/active.go b/core/commands/active.go index 4fada6f13..21e4b9c32 100644 --- a/core/commands/active.go +++ b/core/commands/active.go @@ -1,7 +1,6 @@ package commands import ( - "bytes" "fmt" "io" "sort" @@ -10,7 +9,7 @@ import ( oldcmds "github.com/ipfs/go-ipfs/commands" - cmds "gx/ipfs/QmdTmGruUz23vgzym3uWpnAEQdGdGifQqBvP8UXSRjG8gZ/go-ipfs-cmds" + cmds "gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) @@ -40,9 +39,7 @@ Lists running and recently run commands. cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *[]*cmds.ReqLogEntry) error { verbose, _ := req.Options[verboseOptionName].(bool) - buf := new(bytes.Buffer) - - tw := tabwriter.NewWriter(buf, 4, 4, 2, ' ', 0) + tw := tabwriter.NewWriter(w, 4, 4, 2, ' ', 0) if verbose { fmt.Fprint(tw, "ID\t") } @@ -82,8 +79,6 @@ Lists running and recently run commands. } tw.Flush() - fmt.Fprint(w, buf) - return nil }), }, diff --git a/core/commands/diag.go b/core/commands/diag.go index b456b1f08..6b9a44ec8 100644 --- a/core/commands/diag.go +++ b/core/commands/diag.go @@ -1,7 +1,7 @@ package commands import ( - cmds "gx/ipfs/QmdTmGruUz23vgzym3uWpnAEQdGdGifQqBvP8UXSRjG8gZ/go-ipfs-cmds" + cmds "gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) diff --git a/core/commands/mount_nofuse.go b/core/commands/mount_nofuse.go index db31b91d7..cd93ac319 100644 --- a/core/commands/mount_nofuse.go +++ b/core/commands/mount_nofuse.go @@ -3,7 +3,7 @@ package commands import ( - cmds "gx/ipfs/QmdTmGruUz23vgzym3uWpnAEQdGdGifQqBvP8UXSRjG8gZ/go-ipfs-cmds" + cmds "gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) diff --git a/core/commands/mount_windows.go b/core/commands/mount_windows.go index 3f99e86e1..07b1a42a8 100644 --- a/core/commands/mount_windows.go +++ b/core/commands/mount_windows.go @@ -3,7 +3,7 @@ package commands import ( "errors" - cmds "gx/ipfs/QmdTmGruUz23vgzym3uWpnAEQdGdGifQqBvP8UXSRjG8gZ/go-ipfs-cmds" + cmds "gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) From 2c48466630e58043869f9a9fd91ab5c66d23e7e4 Mon Sep 17 00:00:00 2001 From: Overbool Date: Wed, 31 Oct 2018 10:10:23 +0800 Subject: [PATCH 7/8] commands: use EmitOnce for single object License: MIT Signed-off-by: Overbool --- core/commands/active.go | 4 ++-- core/commands/config.go | 6 +++--- core/commands/diag.go | 2 +- core/commands/log.go | 7 ++++--- core/commands/mount_nofuse.go | 2 +- core/commands/mount_unix.go | 19 ++++++++++++------- core/commands/mount_windows.go | 2 +- core/commands/sysdiag.go | 6 +++--- 8 files changed, 27 insertions(+), 21 deletions(-) diff --git a/core/commands/active.go b/core/commands/active.go index 21e4b9c32..a9913820e 100644 --- a/core/commands/active.go +++ b/core/commands/active.go @@ -9,7 +9,7 @@ import ( oldcmds "github.com/ipfs/go-ipfs/commands" - cmds "gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds" + cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) @@ -26,7 +26,7 @@ Lists running and recently run commands. }, Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { ctx := env.(*oldcmds.Context) - return res.Emit(ctx.ReqLog.Report()) + return cmds.EmitOnce(res, ctx.ReqLog.Report()) }, Options: []cmdkit.Option{ cmdkit.BoolOption("verbose", verboseOptionName, "Print extra information."), diff --git a/core/commands/config.go b/core/commands/config.go index b495b8620..0bd957004 100644 --- a/core/commands/config.go +++ b/core/commands/config.go @@ -14,8 +14,8 @@ import ( repo "github.com/ipfs/go-ipfs/repo" fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo" - cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" "gx/ipfs/QmP2i47tnU23ijdshrZtuvrSkQPtf9HhsMb9fwGVe8owj2/jsondiff" + cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds" config "gx/ipfs/QmbK4EmM2Xx5fmbqK38TGP3PpY66r3tkXLZTcc7dF9mFwM/go-ipfs-config" "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) @@ -167,7 +167,7 @@ NOTE: For security reasons, this command will omit your private key. If you woul return err } - return res.Emit(&cfg) + return cmds.EmitOnce(res, &cfg) }, Encoders: cmds.EncoderMap{ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *map[string]interface{}) error { @@ -319,7 +319,7 @@ var configProfileApplyCmd = &cmds.Command{ return err } - return res.Emit(&ConfigUpdateOutput{ + return cmds.EmitOnce(res, &ConfigUpdateOutput{ OldCfg: oldCfgMap, NewCfg: newCfgMap, }) diff --git a/core/commands/diag.go b/core/commands/diag.go index 6b9a44ec8..2b760d0bc 100644 --- a/core/commands/diag.go +++ b/core/commands/diag.go @@ -1,7 +1,7 @@ package commands import ( - cmds "gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds" + cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) diff --git a/core/commands/log.go b/core/commands/log.go index 2434c007b..28106991c 100644 --- a/core/commands/log.go +++ b/core/commands/log.go @@ -4,7 +4,7 @@ import ( "fmt" "io" - cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" + cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds" logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log" lwriter "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log/writer" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" @@ -63,7 +63,8 @@ the event log. s := fmt.Sprintf("Changed log level of '%s' to '%s'\n", subsystem, level) log.Info(s) - return res.Emit(&MessageOutput{s}) + + return cmds.EmitOnce(res, &MessageOutput{s}) }, Encoders: cmds.EncoderMap{ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *MessageOutput) error { @@ -83,7 +84,7 @@ subsystems of a running daemon. `, }, Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - return res.Emit(&stringList{logging.GetSubsystems()}) + return cmds.EmitOnce(res, &stringList{logging.GetSubsystems()}) }, Encoders: cmds.EncoderMap{ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, list *stringList) error { diff --git a/core/commands/mount_nofuse.go b/core/commands/mount_nofuse.go index cd93ac319..84122467c 100644 --- a/core/commands/mount_nofuse.go +++ b/core/commands/mount_nofuse.go @@ -3,7 +3,7 @@ package commands import ( - cmds "gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds" + cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) diff --git a/core/commands/mount_unix.go b/core/commands/mount_unix.go index a20ea29dc..64e3d3de6 100644 --- a/core/commands/mount_unix.go +++ b/core/commands/mount_unix.go @@ -9,9 +9,14 @@ import ( cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv" nodeMount "github.com/ipfs/go-ipfs/fuse/node" - config "gx/ipfs/QmPEpj17FDRpc7K1aArKZp3RsHtzRMKykeK9GVgn4WQGPR/go-ipfs-config" + cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds" config "gx/ipfs/QmbK4EmM2Xx5fmbqK38TGP3PpY66r3tkXLZTcc7dF9mFwM/go-ipfs-config" - "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" + cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" +) + +const ( + mountIPFSPathOptionName = "ipfs-path" + mountIPNSPathOptionName = "ipns-path" ) var MountCmd = &cmds.Command{ @@ -72,8 +77,8 @@ baz `, }, Options: []cmdkit.Option{ - cmdkit.StringOption("ipfs-path", "f", "The path where IPFS should be mounted."), - cmdkit.StringOption("ipns-path", "n", "The path where IPNS should be mounted."), + cmdkit.StringOption(mountIPFSPathOptionName, "f", "The path where IPFS should be mounted."), + cmdkit.StringOption(mountIPNSPathOptionName, "n", "The path where IPNS should be mounted."), }, Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { cfg, err := cmdenv.GetConfig(env) @@ -91,13 +96,13 @@ baz return err } - fsdir, found := req.Options["f"].(string) + fsdir, found := req.Options[mountIPFSPathOptionName].(string) if !found { fsdir = cfg.Mounts.IPFS // use default value } // get default mount points - nsdir, found := req.Options["n"].(string) + nsdir, found := req.Options[mountIPNSPathOptionName].(string) if !found { nsdir = cfg.Mounts.IPNS // NB: be sure to not redeclare! } @@ -110,7 +115,7 @@ baz var output config.Mounts output.IPFS = fsdir output.IPNS = nsdir - return res.Emit(&output) + return cmds.EmitOnce(res, &output) }, Type: config.Mounts{}, Encoders: cmds.EncoderMap{ diff --git a/core/commands/mount_windows.go b/core/commands/mount_windows.go index 07b1a42a8..36b408d62 100644 --- a/core/commands/mount_windows.go +++ b/core/commands/mount_windows.go @@ -3,7 +3,7 @@ package commands import ( "errors" - cmds "gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds" + cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) diff --git a/core/commands/sysdiag.go b/core/commands/sysdiag.go index 05faf700e..8d5ad041f 100644 --- a/core/commands/sysdiag.go +++ b/core/commands/sysdiag.go @@ -8,10 +8,10 @@ import ( version "github.com/ipfs/go-ipfs" cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv" - cmds "gx/ipfs/QmRRovo1DE6i5cMjCbf19mQCSuszF6SKwdZNUMS7MtBnH1/go-ipfs-cmds" manet "gx/ipfs/QmQVUtnrNGtCRkCMpXgpApfzQjc8FDaDVxHqWH8cnZQeh5/go-multiaddr-net" sysi "gx/ipfs/QmZRjKbHa6DenStpQJFiaPcEwkZqrx7TH6xTf342LDU3qM/go-sysinfo" - "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" + cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds" + cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) var sysDiagCmd = &cmds.Command{ @@ -54,7 +54,7 @@ Prints out information about your computer to aid in easier debugging. info["ipfs_version"] = version.CurrentVersionNumber info["ipfs_commit"] = version.CurrentCommit - return res.Emit(info) + return cmds.EmitOnce(res, info) }, } From 0afbafdeaf42fa6aa6140905a3149ce6db9969d8 Mon Sep 17 00:00:00 2001 From: Overbool Date: Tue, 6 Nov 2018 10:18:25 +0800 Subject: [PATCH 8/8] cmds: use w.Write directly License: MIT Signed-off-by: Overbool --- core/commands/config.go | 55 ++++++++++++++++++++++++++----------- core/commands/mount_unix.go | 8 +++--- 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/core/commands/config.go b/core/commands/config.go index 0bd957004..0764a75db 100644 --- a/core/commands/config.go +++ b/core/commands/config.go @@ -10,14 +10,14 @@ import ( "os/exec" "strings" - oldcmds "github.com/ipfs/go-ipfs/commands" + cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv" repo "github.com/ipfs/go-ipfs/repo" fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo" "gx/ipfs/QmP2i47tnU23ijdshrZtuvrSkQPtf9HhsMb9fwGVe8owj2/jsondiff" cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds" config "gx/ipfs/QmbK4EmM2Xx5fmbqK38TGP3PpY66r3tkXLZTcc7dF9mFwM/go-ipfs-config" - "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" + cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) // ConfigUpdateOutput is config profile apply command's output @@ -86,8 +86,11 @@ Set the value of the 'Datastore.Path' key: default: } - ctx := env.(*oldcmds.Context) - r, err := fsrepo.Open(ctx.ConfigRoot) + cfgRoot, err := cmdenv.GetConfigRoot(env) + if err != nil { + return err + } + r, err := fsrepo.Open(cfgRoot) if err != nil { return err } @@ -128,7 +131,9 @@ Set the value of the 'Datastore.Path' key: if err != nil { return err } - fmt.Fprintln(w, string(buf)) + buf = append(buf, byte('\n')) + + w.Write(buf) return nil }), }, @@ -144,9 +149,12 @@ NOTE: For security reasons, this command will omit your private key. If you woul }, Type: map[string]interface{}{}, Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - ctx := env.(*oldcmds.Context) - cfgPath := ctx.ConfigRoot - fname, err := config.Filename(cfgPath) + cfgRoot, err := cmdenv.GetConfigRoot(env) + if err != nil { + return err + } + + fname, err := config.Filename(cfgRoot) if err != nil { return err } @@ -175,7 +183,9 @@ NOTE: For security reasons, this command will omit your private key. If you woul if err != nil { return err } - fmt.Fprintln(w, string(buf)) + buf = append(buf, byte('\n')) + w.Write(buf) + return nil }), }, @@ -232,8 +242,12 @@ variable set to your preferred text editor. }, Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - ctx := env.(*oldcmds.Context) - filename, err := config.Filename(ctx.ConfigRoot) + cfgRoot, err := cmdenv.GetConfigRoot(env) + if err != nil { + return err + } + + filename, err := config.Filename(cfgRoot) if err != nil { return err } @@ -255,8 +269,12 @@ can't be undone. cmdkit.FileArg("file", true, false, "The file to use as the new config."), }, Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - ctx := env.(*oldcmds.Context) - r, err := fsrepo.Open(ctx.ConfigRoot) + cfgRoot, err := cmdenv.GetConfigRoot(env) + if err != nil { + return err + } + + r, err := fsrepo.Open(cfgRoot) if err != nil { return err } @@ -303,8 +321,12 @@ var configProfileApplyCmd = &cmds.Command{ } dryRun, _ := req.Options["dry-run"].(bool) - ctx := env.(*oldcmds.Context) - oldCfg, newCfg, err := transformConfig(ctx.ConfigRoot, req.Arguments[0], profile.Transform, dryRun) + cfgRoot, err := cmdenv.GetConfigRoot(env) + if err != nil { + return err + } + + oldCfg, newCfg, err := transformConfig(cfgRoot, req.Arguments[0], profile.Transform, dryRun) if err != nil { return err } @@ -329,7 +351,8 @@ var configProfileApplyCmd = &cmds.Command{ diff := jsondiff.Compare(out.OldCfg, out.NewCfg) buf := jsondiff.Format(diff) - fmt.Fprint(w, string(buf)) + w.Write(buf) + return nil }), }, diff --git a/core/commands/mount_unix.go b/core/commands/mount_unix.go index 64e3d3de6..6df4d53e8 100644 --- a/core/commands/mount_unix.go +++ b/core/commands/mount_unix.go @@ -93,7 +93,7 @@ baz // error if we aren't running node in online mode if nd.LocalMode() { - return err + return ErrNotOnline } fsdir, found := req.Options[mountIPFSPathOptionName].(string) @@ -120,9 +120,9 @@ baz Type: config.Mounts{}, Encoders: cmds.EncoderMap{ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, mounts *config.Mounts) error { - s := fmt.Sprintf("IPFS mounted at: %s\n", mounts.IPFS) - s += fmt.Sprintf("IPNS mounted at: %s\n", mounts.IPNS) - fmt.Fprint(w, s) + fmt.Fprintf(w, "IPFS mounted at: %s\n", mounts.IPFS) + fmt.Fprintf(w, "IPNS mounted at: %s\n", mounts.IPNS) + return nil }), },