diff --git a/i18n/zh_CN.json b/i18n/zh_CN.json
index 5dfc57b..f3d16b4 100644
--- a/i18n/zh_CN.json
+++ b/i18n/zh_CN.json
@@ -9,6 +9,7 @@
"delete": "删除",
"save": "保存",
"format": "格式化",
+ "goget": "go get",
"build_n_run": "构建 & 运行",
"full_screen": "全屏"
}
\ No newline at end of file
diff --git a/main.go b/main.go
index 6e33f68..1e43b6a 100644
--- a/main.go
+++ b/main.go
@@ -76,6 +76,7 @@ func main() {
// 运行相关
http.HandleFunc("/build", output.BuildHandler)
http.HandleFunc("/run", output.RunHandler)
+ http.HandleFunc("/go/get", output.GoGetHandler)
http.HandleFunc("/output/ws", output.WSHandler)
// 文件树
diff --git a/output/outputs.go b/output/outputs.go
index 4062d3f..cf2bba2 100644
--- a/output/outputs.go
+++ b/output/outputs.go
@@ -155,7 +155,6 @@ func BuildHandler(w http.ResponseWriter, r *http.Request) {
cmd := exec.Command("go", argv...)
cmd.Dir = curDir
- // 设置环境变量(设置当前用户的 GOPATH 等)
setCmdEnv(cmd, username)
glog.Infof("go build -o %s %s", executable, filePath)
@@ -233,6 +232,82 @@ func BuildHandler(w http.ResponseWriter, r *http.Request) {
}
}
+func GoGetHandler(w http.ResponseWriter, r *http.Request) {
+ data := map[string]interface{}{"succ": true}
+ defer util.RetJSON(w, r, data)
+
+ session, _ := user.Session.Get(r, "wide-session")
+ sid := session.Values["id"].(string)
+ username := session.Values["username"].(string)
+
+ decoder := json.NewDecoder(r.Body)
+
+ var args map[string]interface{}
+
+ if err := decoder.Decode(&args); err != nil {
+ glog.Error(err)
+ data["succ"] = false
+
+ return
+ }
+
+ filePath := args["file"].(string)
+ curDir := filePath[:strings.LastIndex(filePath, string(os.PathSeparator))]
+
+ cmd := exec.Command("go", "get")
+ cmd.Dir = curDir
+
+ setCmdEnv(cmd, username)
+
+ stdout, err := cmd.StdoutPipe()
+ if nil != err {
+ glog.Error(err)
+ data["succ"] = false
+
+ return
+ }
+
+ stderr, err := cmd.StderrPipe()
+ if nil != err {
+ glog.Error(err)
+ data["succ"] = false
+
+ return
+ }
+
+ reader := io.MultiReader(stdout, stderr)
+
+ cmd.Start()
+
+ channelRet := map[string]interface{}{}
+
+ go func(runningId int) {
+ glog.Infof("Session [%s] is running [go get] [runningId=%d]", sid, runningId)
+
+ for {
+ buf := make([]byte, 1024)
+ count, err := reader.Read(buf)
+
+ if nil != err || 0 == count {
+ glog.Infof("Session [%s] 's running [go get] [runningId=%d] has done", sid, runningId)
+
+ break
+ } else {
+ channelRet["output"] = string(buf[:count])
+ channelRet["cmd"] = "run"
+
+ if nil != outputWS[sid] {
+ err := outputWS[sid].WriteJSON(&channelRet)
+ if nil != err {
+ glog.Error(err)
+ break
+ }
+ }
+ }
+ }
+ }(rand.Int())
+}
+
func setCmdEnv(cmd *exec.Cmd, username string) {
userWorkspace := conf.Wide.GetUserWorkspace(username)
@@ -240,5 +315,9 @@ func setCmdEnv(cmd *exec.Cmd, username string) {
"GOPATH="+userWorkspace,
"GOOS="+runtime.GOOS,
"GOARCH="+runtime.GOARCH,
- "GOROOT="+runtime.GOROOT())
+ "GOROOT="+runtime.GOROOT(),
+ "PATH="+os.Getenv("PATH"))
+
+ //"TERM="+os.Getenv("COMSPEC"),
+ //"ComSpec="+os.Getenv("ComSpec")
}
diff --git a/static/js/wide.js b/static/js/wide.js
index 7b4a4a1..8b62c62 100644
--- a/static/js/wide.js
+++ b/static/js/wide.js
@@ -125,12 +125,24 @@ var wide = {
beforeSend: function(data) {
$('#output').text('');
},
+ success: function(data) {
+ }
+ });
+ },
+ goget: function() {
+ var request = {
+ "file": wide.curNode.path
+ };
+
+ $.ajax({
+ type: 'POST',
+ url: '/go/get',
+ data: JSON.stringify(request),
+ dataType: "json",
+ beforeSend: function(data) {
+ $('#output').text('');
+ },
success: function(data) {
- executable = data.executable;
-
- if (data.succ) {
-
- }
}
});
},
diff --git a/view/index.html b/view/index.html
index e85bfb5..6ffe0ed 100644
--- a/view/index.html
+++ b/view/index.html
@@ -23,6 +23,7 @@
+