fixing windows download and environment #3

Merged
merged 15 commits into from Oct 1, 2016
View
@@ -10,13 +10,16 @@ import (
"runtime"
"github.com/gpahal/shlex"
+ "github.com/mitchellh/go-ps"
)
var goPath = ""
var execCmd = ""
var envPath = ".gobu"
var globalVersion = "1.7"
-var onlinePath = "https://storage.googleapis.com/golang/go%s.%s-%s.tar.gz"
+var onlinePath = "https://storage.googleapis.com/golang/go%s.%s-%s%s"
+var unixExtension = ".tar.gz"
+var winExtension = ".zip"
func userHomeDir() string {
if runtime.GOOS == "windows" {
@@ -55,9 +58,25 @@ func runShell(version string) {
os.Setenv("GOBU", "1")
log.Println(">> You are now in a new GOBU shell. To exit, type 'exit'")
- defaultShell := resolveBinary(os.Getenv("SHELL"))
- run(version, defaultShell, []string{defaultShell})
+ shell := os.Getenv("SHELL")
+
+ if runtime.GOOS == "windows" {
+
+ parentId := os.Getppid()
+
+ parentProcess, err := ps.FindProcess(parentId)
+
+ if err != nil {
+ log.Panic(err)
+ }
+
+ shell = parentProcess.Executable()
+ }
+
+ shellBinary := resolveBinary(shell)
+
+ run(version, shellBinary, []string{shellBinary})
log.Println("Exited gobu shell")
}
@@ -113,10 +132,17 @@ func main() {
if arch == "arm" {
arch = "armv6l"
}
- onlinePath = fmt.Sprintf(onlinePath, globalVersion, runtime.GOOS, arch)
+
+ extension := unixExtension
+
+ if runtime.GOOS == "windows" {
+ extension = winExtension
+ }
+
+ onlinePath = fmt.Sprintf(onlinePath, globalVersion, runtime.GOOS, arch, extension)
createStore(globalVersion)
- download(globalVersion)
+ download(globalVersion, extension)
if execCmd != "" {
execCmdParsed, err := shlex.Split(execCmd)
if err != nil {
View
@@ -6,10 +6,12 @@ import (
"net/http"
"os"
"path/filepath"
+ "runtime"
)
-func download(version string) {
- local := filepath.Join(envPath, version+".tar.gz")
+func download(version string, extension string) {
+
+ local := filepath.Join(envPath, version+extension)
target := filepath.Join(envPath, version)
if _, err := os.Stat(local); os.IsNotExist(err) {
log.Printf("Local path: %s", local)
@@ -26,7 +28,12 @@ func download(version string) {
}
defer resp.Body.Close()
io.Copy(out, resp.Body)
- untar(local, target)
+
+ if runtime.GOOS == "windows" {
+ unzip(local, target)
+ } else {
+ untar(local, target)
+ }
} else {
log.Printf("Skipping download")
}
View
@@ -0,0 +1,58 @@
+package main
+
+import (
+ "archive/zip"
+ "io"
+ "log"
+ "os"
+ "path/filepath"
+)
+
+func unzip(source, target string) {
+
+ r, err := zip.OpenReader(source)
+
+ defer r.Close()
+
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ if err := os.MkdirAll(target, 0755); err != nil {
+
+ log.Fatal(err)
+ }
+
+ for _, file := range r.File {
+
+ path := filepath.Join(target, file.Name)
+ if file.FileInfo().IsDir() {
+ log.Println("Creating directory :", file.Name)
+ os.MkdirAll(path, file.Mode())
+ continue
+ }
+
+ fileReader, err := file.Open()
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ defer fileReader.Close()
+
+ targetFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ defer targetFile.Close()
+
+ log.Println("Unzipping :", file.Name)
+
+ if _, err := io.Copy(targetFile, fileReader); err != nil {
+
+ log.Fatal(err)
+ }
+
+ }
+
+}