func (i *cmdInvocation) Parse(ctx context.Context, args []string) error { var err error i.req, i.cmd, i.path, err = cmdsCli.Parse(args, os.Stdin, Root) if err != nil { return err } repoPath, err := getRepoPath(i.req) if err != nil { return err } log.Debugf("config path is %s", repoPath) // this sets up the function that will initialize the config lazily. cmdctx := i.req.InvocContext() cmdctx.ConfigRoot = repoPath cmdctx.LoadConfig = loadConfig // this sets up the function that will initialize the node // this is so that we can construct the node lazily. cmdctx.ConstructNode = i.constructNodeFunc(ctx) // if no encoding was specified by user, default to plaintext encoding // (if command doesn't support plaintext, use JSON instead) if !i.req.Option("encoding").Found() { if i.req.Command().Marshalers != nil && i.req.Command().Marshalers[cmds.Text] != nil { i.req.SetOption("encoding", cmds.Text) } else { i.req.SetOption("encoding", cmds.JSON) } } return nil }
func NewRequest(ctx cmds.Context, args []string) (cmds.Request, *cmds.Command, error) { Root.Subcommands = localCommands for k, v := range commands.Root.Subcommands { if _, found := Root.Subcommands[k]; !found { Root.Subcommands[k] = v } } req, cmd, _, err := cli.Parse(args, nil, Root) cctx := context.Background() rerr := req.SetRootContext(cctx) if rerr != nil { return nil, nil, rerr } req.SetInvocContext(ctx) return req, cmd, err }