for "cmd" type blocks
(blockId string, blockMeta waveobj.MetaMapType, connName string)
| 716 | |
| 717 | // for "cmd" type blocks |
| 718 | func createCmdStrAndOpts(blockId string, blockMeta waveobj.MetaMapType, connName string) (string, *shellexec.CommandOptsType, error) { |
| 719 | var cmdStr string |
| 720 | var cmdOpts shellexec.CommandOptsType |
| 721 | cmdStr = blockMeta.GetString(waveobj.MetaKey_Cmd, "") |
| 722 | if cmdStr == "" { |
| 723 | return "", nil, fmt.Errorf("missing cmd in block meta") |
| 724 | } |
| 725 | cmdOpts.Cwd = blockMeta.GetString(waveobj.MetaKey_CmdCwd, "") |
| 726 | if cmdOpts.Cwd != "" { |
| 727 | cwdPath, err := wavebase.ExpandHomeDir(cmdOpts.Cwd) |
| 728 | if err != nil { |
| 729 | return "", nil, err |
| 730 | } |
| 731 | cmdOpts.Cwd = cwdPath |
| 732 | } |
| 733 | useShell := blockMeta.GetBool(waveobj.MetaKey_CmdShell, true) |
| 734 | if !useShell { |
| 735 | if strings.Contains(cmdStr, " ") { |
| 736 | return "", nil, fmt.Errorf("cmd should not have spaces if cmd:shell is false (use cmd:args)") |
| 737 | } |
| 738 | cmdArgs := blockMeta.GetStringList(waveobj.MetaKey_CmdArgs) |
| 739 | // shell escape the args |
| 740 | for _, arg := range cmdArgs { |
| 741 | cmdStr = cmdStr + " " + utilfn.ShellQuote(arg, false, -1) |
| 742 | } |
| 743 | } |
| 744 | cmdOpts.ForceJwt = blockMeta.GetBool(waveobj.MetaKey_CmdJwt, false) |
| 745 | return cmdStr, &cmdOpts, nil |
| 746 | } |
| 747 | |
| 748 | func (bc *ShellController) getBlockData_noErr() *waveobj.Block { |
| 749 | ctx, cancelFn := context.WithTimeout(context.Background(), DefaultTimeout) |
no test coverage detected