From 0bc5644af482c637898164e4076fafcba90d3741 Mon Sep 17 00:00:00 2001 From: Patrick Sullivan Date: Wed, 30 Sep 2015 11:46:02 -0700 Subject: [PATCH] fix: node v4 support works fix: 'install latest' works fix: current version arch works --- src/nvm.go | 20 ++++++++++---------- src/nvm/node/node.go | 26 +++++++++++++++----------- src/nvm/web/web.go | 17 +++++++++++++++++ 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/src/nvm.go b/src/nvm.go index 329a83f..46ced54 100644 --- a/src/nvm.go +++ b/src/nvm.go @@ -120,11 +120,11 @@ func update() { } func CheckVersionExceedsLatest(version string) bool{ - content := web.GetRemoteTextFile("http://nodejs.org/dist/latest/SHASUMS.txt") + content := web.GetRemoteTextFile("http://nodejs.org/dist/latest/SHASUMS256.txt") re := regexp.MustCompile("node-v(.+)+msi") reg := regexp.MustCompile("node-v|-x.+") latest := reg.ReplaceAllString(re.FindString(content),"") - + if version <= latest { return false } else { @@ -155,6 +155,14 @@ func install(version string, cpuarch string) { cpuarch = arch.Validate(cpuarch) } + // If user specifies "latest" version, find out what version is + if version == "latest" { + content := web.GetRemoteTextFile("http://nodejs.org/dist/latest/SHASUMS256.txt") + re := regexp.MustCompile("node-v(.+)+msi") + reg := regexp.MustCompile("node-v|-x.+") + version = reg.ReplaceAllString(re.FindString(content),"") + } + if CheckVersionExceedsLatest(version) { fmt.Println("Node.js v"+version+" is not yet released or available.") return @@ -165,14 +173,6 @@ func install(version string, cpuarch string) { return } - // If user specifies "latest" version, find out what version is - if version == "latest" { - content := web.GetRemoteTextFile("http://nodejs.org/dist/latest/SHASUMS.txt") - re := regexp.MustCompile("node-v(.+)+msi") - reg := regexp.MustCompile("node-v|-x.+") - version = reg.ReplaceAllString(re.FindString(content),"") - } - // Check to see if the version is already installed if !node.IsVersionInstalled(env.root,version,cpuarch) { diff --git a/src/nvm/node/node.go b/src/nvm/node/node.go index 0e586d3..739522d 100644 --- a/src/nvm/node/node.go +++ b/src/nvm/node/node.go @@ -25,17 +25,21 @@ func GetCurrentVersion() (string, string) { cmd := exec.Command("node","-p","console.log(process.execPath)") str, _ := cmd.Output() file := strings.Trim(regexp.MustCompile("undefined").ReplaceAllString(string(str),"")," \n\r") - bit := arch.Bit(file) - if (bit == "?"){ - cmd := exec.Command("node", "-e", "console.log(process.arch)" ) - str, err := cmd.Output() - if (string(str) == "x64") { - bit := "64" - } else { - bit := "32" - } - } - return v, bit + bit := arch.Bit(file) + if (bit == "?"){ + cmd := exec.Command("node", "-e", "console.log(process.arch)" ) + str, err := cmd.Output() + if (err == nil) { + if (string(str) == "x64") { + bit = "64" + } else { + bit = "32" + } + } else { + return v, "Unknown" + } + } + return v, bit } return "Unknown","" } diff --git a/src/nvm/web/web.go b/src/nvm/web/web.go index 10dd779..f0d927d 100644 --- a/src/nvm/web/web.go +++ b/src/nvm/web/web.go @@ -142,6 +142,23 @@ func GetRemoteTextFile(url string) string { return "" } +func IsNode64bitAvailable(v string) bool { + if v == "latest" { + return true + } + + // Anything below version 8 doesn't have a 64 bit version + vers := strings.Fields(strings.Replace(v,"."," ",-1)) + main, _ := strconv.ParseInt(vers[0],0,0) + minor, _ := strconv.ParseInt(vers[1],0,0) + if main == 0 && minor < 8 { + return false + } + + // TODO: fixme. Assume a 64 bit version exists + return true +} + func getNodeUrl (v string, vpre string) string { url := "http://nodejs.org/dist/v"+v+"/" + vpre + "/node.exe" // Check online to see if a 64 bit version exists -- GitLab