MCPcopy Index your code
hub / github.com/cli/cli / Dispatch

Method Dispatch

pkg/cmd/extension/manager.go:91–134  ·  view source on GitHub ↗
(args []string, stdin io.Reader, stdout, stderr io.Writer)

Source from the content-addressed store, hash-verified

89}
90
91func (m *Manager) Dispatch(args []string, stdin io.Reader, stdout, stderr io.Writer) (bool, error) {
92 if len(args) == 0 {
93 return false, errors.New("too few arguments in list")
94 }
95
96 var exe string
97 extName := args[0]
98 forwardArgs := args[1:]
99
100 exts, _ := m.list(false)
101 var ext *Extension
102 for _, e := range exts {
103 if e.Name() == extName {
104 ext = e
105 exe = ext.Path()
106 break
107 }
108 }
109 if exe == "" {
110 return false, nil
111 }
112
113 var externalCmd *exec.Cmd
114
115 if ext.IsBinary() || runtime.GOOS != "windows" {
116 externalCmd = m.newCommand(exe, forwardArgs...)
117 } else if runtime.GOOS == "windows" {
118 // Dispatch all extension calls through the `sh` interpreter to support executable files with a
119 // shebang line on Windows.
120 shExe, err := m.findSh()
121 if err != nil {
122 if errors.Is(err, exec.ErrNotFound) {
123 return true, errors.New("the `sh.exe` interpreter is required. Please install Git for Windows and try again")
124 }
125 return true, err
126 }
127 forwardArgs = append([]string{"-c", `command "$@"`, "--", exe}, forwardArgs...)
128 externalCmd = m.newCommand(shExe, forwardArgs...)
129 }
130 externalCmd.Stdin = stdin
131 externalCmd.Stdout = stdout
132 externalCmd.Stderr = stderr
133 return true, externalCmd.Run()
134}
135
136func (m *Manager) List() []extensions.Extension {
137 exts, _ := m.list(false)

Callers

nothing calls this directly

Calls 5

listMethod · 0.95
PathMethod · 0.95
IsBinaryMethod · 0.95
NameMethod · 0.65
RunMethod · 0.65

Tested by

no test coverage detected