diff --git a/src/nvm.go b/src/nvm.go index 329a83fff279cb0d0b6746b1fd1f5c0a1f31f72a..46ced54965a874ccca7ca2524dafb9052bae28a0 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 0e586d300730b8cf53aaa88d34af211175edcf1c..739522dfed8665ceefa090aa70181c03c9a49528 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 10dd7794f4cc626647629f6b16165f8f2a0c8f9e..f0d927d5b6b0c27e4a51ad39f254c3788084cd67 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