func zipHandle(filePath string) error { destPath := os.Getenv("HOME") + "/Downloads/" err := zip.UnarchiveFile(filePath, destPath, nil) if err != nil { return err } err = os.Remove(filePath) return nil }
func InstallNpm() { // try catch defer func() { if err := recover(); err != nil { if strings.HasPrefix(err.(string), "CURL Error:") { fmt.Printf("\n") } Error(ERROR, "'gnvm install npm' an error has occurred. \nError: ", err) os.Exit(0) } }() out, err := exec.Command(rootPath+"npm", "--version").Output() if err == nil { P(WARING, "current path %v exist npm, version is %v", rootPath, string(out[:]), "\n") return } url := config.GetConfig(config.REGISTRY) + "npm" // get code, res, _ := curl.Get(url) if code != 0 { return } // close defer res.Body.Close() maxTime, _ := time.Parse(TIMEFORMART, TIMEFORMART) var maxVersion string getNpmVersion := func(content string, line int) bool { if strings.Index(content, `<a href="`) == 0 && strings.Contains(content, ".zip") { // parse newLine := strings.Replace(content, `<a href="`, "", -1) newLine = strings.Replace(newLine, `</a`, "", -1) newLine = strings.Replace(newLine, `">`, " ", -1) // e.g. npm-1.3.9.zip npm-1.3.9.zip> 23-Aug-2013 21:14 1535885 orgArr := strings.Fields(newLine) // e.g. npm-1.3.9.zip version := orgArr[0:1][0] // e.g. 23-Aug-2013 21:14 sTime := strings.Join(orgArr[2:len(orgArr)-1], " ") // bubble sort if t, err := time.Parse(TIMEFORMART, sTime); err == nil { if t.Sub(maxTime).Seconds() > 0 { maxTime = t maxVersion = version } } } return false } if err := curl.ReadLine(res.Body, getNpmVersion); err != nil && err != io.EOF { P(ERROR, "parse npm version Error: %v, from %v\n", err, url) return } if maxVersion == "" { P(ERROR, "get npm version fail from %v, please check. See '%v'.\n", url, "gnvm help config") return } P(NOTICE, "the latest version is %v from %v.\n", maxVersion, config.GetConfig(config.REGISTRY)) // download zip zipPath := os.TempDir() + DIVIDE + maxVersion if code := downloadNpm(maxVersion); code == 0 { P(DEFAULT, "Start unarchive file %v.\n", maxVersion) //unzip(maxVersion) if err := zip.UnarchiveFile(zipPath, config.GetConfig(config.NODEROOT), nil); err != nil { panic(err) } P(DEFAULT, "End unarchive.\n") } // remove temp zip file if err := os.RemoveAll(zipPath); err != nil { P(ERROR, "remove zip file fail from %v, Error: %v.\n", zipPath, err.Error()) } }