diff --git a/nvm.iss b/nvm.iss index 39a9fee5ee04316864e4a0d13b8e0d38fcc31540..7e4097ab8edcace6acf78f43ab208a08c6bd768c 100644 --- a/nvm.iss +++ b/nvm.iss @@ -1,7 +1,7 @@ #define MyAppName "NVM for Windows" #define MyAppShortName "nvm" #define MyAppLCShortName "nvm" -#define MyAppVersion "1.0.6" +#define MyAppVersion "1.1.0" #define MyAppPublisher "Ecor Ventures, LLC" #define MyAppURL "http://github.com/coreybutler/nvm" #define MyAppExeName "nvm.exe" diff --git a/src/nvm.go b/src/nvm.go index 52023015d2863430820576d4dad651dfbfc3a6a1..46ced54965a874ccca7ca2524dafb9052bae28a0 100644 --- a/src/nvm.go +++ b/src/nvm.go @@ -18,7 +18,7 @@ import ( ) const ( - NvmVersion = "1.0.6" + NvmVersion = "1.1.0" ) type Environment struct { @@ -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 a4f7e42e0e181dcc1ae22c46ee3ce3fbd2aa1ea8..f0d927d5b6b0c27e4a51ad39f254c3788084cd67 100644 --- a/src/nvm/web/web.go +++ b/src/nvm/web/web.go @@ -59,26 +59,42 @@ func GetNodeJS(root string, v string, a string) bool { a = arch.Validate(a) - url := "" + vpre := "" + vers := strings.Fields(strings.Replace(v,"."," ",-1)) + main, _ := strconv.ParseInt(vers[0],0,0) + if a == "32" { - url = "http://nodejs.org/dist/v"+v+"/node.exe" - } else { - if !IsNode64bitAvailable(v) { - fmt.Println("Node.js v"+v+" is only available in 32-bit.") - return false + if main > 0 { + vpre = "win-x86/" + } else { + vpre = "" + } + } else if a == "64" { + if main > 0 { + vpre = "win-x64/" + } else { + vpre = "x64/" } - url = "http://nodejs.org/dist/v"+v+"/x64/node.exe" } - fileName := root+"\\v"+v+"\\node"+a+".exe" + + url := getNodeUrl ( v, vpre ); - fmt.Printf("Downloading node.js version "+v+" ("+a+"-bit)... ") - - if Download(url,fileName) { - fmt.Printf("Complete\n") - return true + if url == "" { + //No url should mean this version/arch isn't available + fmt.Println("Node.js v"+v+" " + a + "bit isn't available right now.") } else { - return false + fileName := root+"\\v"+v+"\\node"+a+".exe" + + fmt.Printf("Downloading node.js version "+v+" ("+a+"-bit)... ") + + if Download(url,fileName) { + fmt.Printf("Complete\n") + return true + } else { + return false + } } + return false } @@ -139,10 +155,20 @@ func IsNode64bitAvailable(v string) bool { 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 - res, err := client.Head("http://nodejs.org/dist/v"+v+"/x64/node.exe") + res, err := client.Head( url ) if err != nil { - return false + return "" + } + if res.StatusCode == 200 { + return url + } else { + return "" } - return res.StatusCode == 200 }