diff --git a/.gitignore b/.gitignore index 6fd2789..a303af7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ govm main +.idea diff --git a/internal/setup/model.go b/internal/setup/model.go index f0461f7..e54dc6c 100644 --- a/internal/setup/model.go +++ b/internal/setup/model.go @@ -132,7 +132,7 @@ After adding to PATH, restart your terminal or run: highlightStyle.Render(m.shimPath), highlightStyle.Render(fmt.Sprintf("echo 'export PATH=\"$HOME/.govm/shim:$PATH\"' >> %s", shellConfigFile)), shellConfigFile, - highlightStyle.Render(fmt.Sprintf("export PATH=\"$HOME/.govm/shim:$PATH\"")), + highlightStyle.Render("export PATH=\"$HOME/.govm/shim:$PATH\""), highlightStyle.Render(fmt.Sprintf("source %s", shellConfigFile))) } diff --git a/internal/utils/constants.go b/internal/utils/constants.go index 02002a4..e94b391 100644 --- a/internal/utils/constants.go +++ b/internal/utils/constants.go @@ -1,5 +1,7 @@ package utils +import "runtime" + type ErrMsg error type VersionsMsg []GoVersion @@ -7,3 +9,11 @@ type VersionsMsg []GoVersion type DeleteCompleteMsg struct { Version string } + +var goBinary = "go" + +func init() { + if runtime.GOOS == "windows" { + goBinary = "go.exe" + } +} diff --git a/internal/utils/utils.go b/internal/utils/utils.go index 867618b..baa0900 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -3,7 +3,6 @@ package utils import ( "encoding/json" "fmt" - tea "github.com/charmbracelet/bubbletea" "io" "net/http" "os" @@ -13,6 +12,8 @@ import ( "sort" "strconv" "strings" + + tea "github.com/charmbracelet/bubbletea" ) type GoVersion struct { @@ -123,7 +124,7 @@ func FetchGoVersions() tea.Msg { if entry.IsDir() && strings.HasPrefix(entry.Name(), "go") { versionPath := filepath.Join(goVersionsDir, entry.Name()) version := strings.TrimPrefix(entry.Name(), "go") - goBin := filepath.Join(versionPath, "bin", "go") + goBin := filepath.Join(versionPath, "bin", goBinary) if _, err := os.Stat(goBin); err == nil { installedVersions[version] = versionPath } @@ -256,18 +257,19 @@ func DownloadAndInstall(version GoVersion) tea.Cmd { if err != nil { return ErrMsg(fmt.Errorf("extraction error: %v\nOutput: %s", err, string(output))) } + if runtime.GOOS != "windows" { - goBin := filepath.Join(versionDir, "bin", "go") + goBin := filepath.Join(versionDir, "bin", goBinary) if _, err := os.Stat(goBin); err == nil { os.Chmod(goBin, 0755) } } - goBin := filepath.Join(versionDir, "bin", "go") + goBin := filepath.Join(versionDir, "bin", goBinary) if _, err := os.Stat(goBin); os.IsNotExist(err) { entries, _ := os.ReadDir(goVersionsDir) for _, entry := range entries { if entry.IsDir() && strings.HasPrefix(entry.Name(), "go") { - testPath := filepath.Join(goVersionsDir, entry.Name(), "bin", "go") + testPath := filepath.Join(goVersionsDir, entry.Name(), "bin", goBinary) if _, err := os.Stat(testPath); err == nil { sourcePath := filepath.Join(goVersionsDir, entry.Name()) if sourcePath != versionDir { @@ -316,7 +318,7 @@ func SwitchVersion(version GoVersion) tea.Cmd { } for _, entry := range entries { if !entry.IsDir() { - binName := entry.Name() + binName := strings.Trim(entry.Name(), ".exe") targetBin := filepath.Join(versionBinDir, binName) shimPath := filepath.Join(shimDir, binName) os.Remove(shimPath)