From 41bf6c7a5268048bc53b4f820ca8c4467c230bc3 Mon Sep 17 00:00:00 2001 From: Dominic Della Valle Date: Mon, 8 Jan 2018 20:17:01 -0500 Subject: [PATCH 1/2] Fix subtool detection on Windows --- gxutil/pm.go | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/gxutil/pm.go b/gxutil/pm.go index 6614c1c..a8de892 100644 --- a/gxutil/pm.go +++ b/gxutil/pm.go @@ -24,9 +24,14 @@ const GxVersion = "0.12.1" const PkgFileName = "package.json" var installPathsCache map[string]string +var binarySuffix string func init() { installPathsCache = make(map[string]string) + + if runtime.GOOS == "windows" { + binarySuffix = ".exe" + } } type PM struct { @@ -669,20 +674,15 @@ func getSubtoolPath(env string) (string, error) { return "", nil } - var suffix string - if runtime.GOOS == "windows" { - suffix = ".exe" - } - - binname := "gx-" + env + suffix + binname := "gx-" + env + binarySuffix _, err := exec.LookPath(binname) if err != nil { if !strings.Contains(err.Error(), "file not found") { return "", err } - if strings.HasSuffix(os.Args[0], "/gx") { - nearBin := os.Args[0] + "-" + env + suffix + if calledWithPathSeparator() { + nearBin := strings.TrimSuffix(os.Args[0], binarySuffix) + "-" + env + binarySuffix if _, err := os.Stat(nearBin); err != nil { VLog("subtool_exec: No gx helper tool found for", env) return "", nil @@ -696,6 +696,25 @@ func getSubtoolPath(env string) (string, error) { return binname, nil } +func calledWithPathSeparator() bool { + trimmedArg := strings.TrimSuffix(os.Args[0], binarySuffix) + if trimmedArg == "gx" { + return false + } + + if runtime.GOOS == "windows" { + if strings.HasSuffix(trimmedArg, (string(os.PathSeparator)+"gx")) || strings.HasSuffix(trimmedArg, "/gx") { + return true + } + } else { + if strings.HasSuffix(trimmedArg, (string(os.PathSeparator) + "gx")) { + return true + } + } + + return false +} + func TryRunHook(hook, env string, req bool, args ...string) error { binname, err := getSubtoolPath(env) if err != nil { From ae64f8aabdc1751565054920e50ffcd4fa74b7b0 Mon Sep 17 00:00:00 2001 From: Dominic Della Valle Date: Mon, 8 Jan 2018 20:19:04 -0500 Subject: [PATCH 2/2] Don't manually compare variable error string --- gxutil/pm.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gxutil/pm.go b/gxutil/pm.go index a8de892..5ed22a9 100644 --- a/gxutil/pm.go +++ b/gxutil/pm.go @@ -677,7 +677,11 @@ func getSubtoolPath(env string) (string, error) { binname := "gx-" + env + binarySuffix _, err := exec.LookPath(binname) if err != nil { - if !strings.Contains(err.Error(), "file not found") { + if eErr, ok := err.(*exec.Error); ok { + if eErr.Err != exec.ErrNotFound { + return "", err + } + } else { return "", err }