@@ -69,9 +69,11 @@ func (m *Manager) Dispatch(args []string, stdin io.Reader, stdout, stderr io.Wri
6969 forwardArgs := args [1 :]
7070
7171 exts , _ := m .list (false )
72+ var ext Extension
7273 for _ , e := range exts {
7374 if e .Name () == extName {
74- exe = e .Path ()
75+ ext = e
76+ exe = ext .Path ()
7577 break
7678 }
7779 }
@@ -81,7 +83,9 @@ func (m *Manager) Dispatch(args []string, stdin io.Reader, stdout, stderr io.Wri
8183
8284 var externalCmd * exec.Cmd
8385
84- if runtime .GOOS == "windows" {
86+ if ext .IsBinary () || runtime .GOOS != "windows" {
87+ externalCmd = m .newCommand (exe , forwardArgs ... )
88+ } else if runtime .GOOS == "windows" {
8589 // Dispatch all extension calls through the `sh` interpreter to support executable files with a
8690 // shebang line on Windows.
8791 shExe , err := m .findSh ()
@@ -93,8 +97,6 @@ func (m *Manager) Dispatch(args []string, stdin io.Reader, stdout, stderr io.Wri
9397 }
9498 forwardArgs = append ([]string {"-c" , `command "$@"` , "--" , exe }, forwardArgs ... )
9599 externalCmd = m .newCommand (shExe , forwardArgs ... )
96- } else {
97- externalCmd = m .newCommand (exe , forwardArgs ... )
98100 }
99101 externalCmd .Stdin = stdin
100102 externalCmd .Stdout = stdout
@@ -268,30 +270,30 @@ func (m *Manager) getLatestVersion(ext Extension) (string, error) {
268270 if ext .isLocal {
269271 return "" , fmt .Errorf ("unable to get latest version for local extensions" )
270272 }
271- if ext .kind == GitKind {
272- gitExe , err := m . lookPath ( "git" )
273+ if ext .IsBinary () {
274+ repo , err := ghrepo . FromFullName ( ext . url )
273275 if err != nil {
274276 return "" , err
275277 }
276- extDir := filepath .Dir (ext .path )
277- gitDir := "--git-dir=" + filepath .Join (extDir , ".git" )
278- cmd := m .newCommand (gitExe , gitDir , "ls-remote" , "origin" , "HEAD" )
279- lsRemote , err := cmd .Output ()
278+ r , err := fetchLatestRelease (m .client , repo )
280279 if err != nil {
281280 return "" , err
282281 }
283- remoteSha := bytes .SplitN (lsRemote , []byte ("\t " ), 2 )[0 ]
284- return string (remoteSha ), nil
282+ return r .Tag , nil
285283 } else {
286- repo , err := ghrepo . FromFullName ( ext . url )
284+ gitExe , err := m . lookPath ( "git" )
287285 if err != nil {
288286 return "" , err
289287 }
290- r , err := fetchLatestRelease (m .client , repo )
288+ extDir := filepath .Dir (ext .path )
289+ gitDir := "--git-dir=" + filepath .Join (extDir , ".git" )
290+ cmd := m .newCommand (gitExe , gitDir , "ls-remote" , "origin" , "HEAD" )
291+ lsRemote , err := cmd .Output ()
291292 if err != nil {
292293 return "" , err
293294 }
294- return r .Tag , nil
295+ remoteSha := bytes .SplitN (lsRemote , []byte ("\t " ), 2 )[0 ]
296+ return string (remoteSha ), nil
295297 }
296298}
297299
@@ -477,7 +479,7 @@ func (m *Manager) upgradeExtension(ext Extension, force bool) error {
477479 return upToDateError
478480 }
479481 var err error
480- if ext .kind == BinaryKind {
482+ if ext .IsBinary () {
481483 err = m .upgradeBinExtension (ext )
482484 } else {
483485 err = m .upgradeGitExtension (ext , force )
0 commit comments