Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 package main | 1 package main |
| 2 | 2 |
| 3 import ( | 3 import ( |
| 4 "bytes" | 4 "bytes" |
| 5 "crypto/md5" | 5 "crypto/md5" |
| 6 "database/sql" | 6 "database/sql" |
| 7 "encoding/base64" | 7 "encoding/base64" |
| 8 "encoding/json" | 8 "encoding/json" |
| 9 "flag" | 9 "flag" |
| 10 "fmt" | 10 "fmt" |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 251 | 251 |
| 252 // response is serialized to JSON as a response to POSTs. | 252 // response is serialized to JSON as a response to POSTs. |
| 253 type response struct { | 253 type response struct { |
| 254 Message string `json:"message"` | 254 Message string `json:"message"` |
| 255 StdOut string `json:"stdout"` | 255 StdOut string `json:"stdout"` |
| 256 Img string `json:"img"` | 256 Img string `json:"img"` |
| 257 Hash string `json:"hash"` | 257 Hash string `json:"hash"` |
| 258 } | 258 } |
| 259 | 259 |
| 260 // doCmd executes the given command line string in either the out/Debug | 260 // doCmd executes the given command line string in either the out/Debug |
| 261 // directory or the inout directory. Returns the stdout, and stderr in the case | 261 // directory or the inout directory. Returns the stdout and stderr. |
| 262 // of a non-zero exit code. | |
| 263 func doCmd(commandLine string, moveToDebug bool) (string, error) { | 262 func doCmd(commandLine string, moveToDebug bool) (string, error) { |
| 264 log.Printf("Command: %q\n", commandLine) | 263 log.Printf("Command: %q\n", commandLine) |
| 265 programAndArgs := strings.SplitN(commandLine, " ", 2) | 264 programAndArgs := strings.SplitN(commandLine, " ", 2) |
| 266 program := programAndArgs[0] | 265 program := programAndArgs[0] |
| 267 args := []string{} | 266 args := []string{} |
| 268 if len(programAndArgs) > 1 { | 267 if len(programAndArgs) > 1 { |
| 269 args = strings.Split(programAndArgs[1], " ") | 268 args = strings.Split(programAndArgs[1], " ") |
| 270 } | 269 } |
| 271 cmd := exec.Command(program, args...) | 270 cmd := exec.Command(program, args...) |
| 272 abs, err := filepath.Abs("../../out/Debug") | 271 abs, err := filepath.Abs("../../out/Debug") |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 283 cmd.Dir = abs | 282 cmd.Dir = abs |
| 284 } | 283 } |
| 285 log.Printf("Run in directory: %q\n", cmd.Dir) | 284 log.Printf("Run in directory: %q\n", cmd.Dir) |
| 286 var stdOut bytes.Buffer | 285 var stdOut bytes.Buffer |
| 287 cmd.Stdout = &stdOut | 286 cmd.Stdout = &stdOut |
| 288 var stdErr bytes.Buffer | 287 var stdErr bytes.Buffer |
| 289 cmd.Stderr = &stdErr | 288 cmd.Stderr = &stdErr |
| 290 cmd.Start() | 289 cmd.Start() |
| 291 err = cmd.Wait() | 290 err = cmd.Wait() |
| 292 message := stdOut.String() | 291 message := stdOut.String() |
| 293 » log.Printf("StdOut: %s\n", message) | 292 » message += stdErr.String() |
|
mtklein
2014/04/28 13:27:36
Perhaps we should use the same buffer for stdout a
jcgregorio
2014/04/28 13:39:36
Done.
| |
| 293 » log.Printf("StdOut + StdErr: %s\n", message) | |
| 294 if err != nil { | 294 if err != nil { |
| 295 log.Printf("Exit status: %s\n", err.Error()) | 295 log.Printf("Exit status: %s\n", err.Error()) |
| 296 log.Printf("StdErr: %s\n", stdErr.String()) | 296 log.Printf("StdErr: %s\n", stdErr.String()) |
| 297 message += stdErr.String() | |
| 298 return message, fmt.Errorf("Failed to run command.") | 297 return message, fmt.Errorf("Failed to run command.") |
| 299 } | 298 } |
| 300 return message, nil | 299 return message, nil |
| 301 } | 300 } |
| 302 | 301 |
| 303 // reportError formats an HTTP error response and also logs the detailed error m essage. | 302 // reportError formats an HTTP error response and also logs the detailed error m essage. |
| 304 func reportError(w http.ResponseWriter, r *http.Request, err error, message stri ng) { | 303 func reportError(w http.ResponseWriter, r *http.Request, err error, message stri ng) { |
| 305 log.Printf("Error: %s\n%s", message, err.Error()) | 304 log.Printf("Error: %s\n%s", message, err.Error()) |
| 306 http.Error(w, message, 500) | 305 http.Error(w, message, 500) |
| 307 } | 306 } |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 666 http.HandleFunc("/w/", workspaceHandler) | 665 http.HandleFunc("/w/", workspaceHandler) |
| 667 http.HandleFunc("/recent/", recentHandler) | 666 http.HandleFunc("/recent/", recentHandler) |
| 668 http.HandleFunc("/iframe/", iframeHandler) | 667 http.HandleFunc("/iframe/", iframeHandler) |
| 669 http.HandleFunc("/json/", tryInfoHandler) | 668 http.HandleFunc("/json/", tryInfoHandler) |
| 670 http.HandleFunc("/css/", cssHandler) | 669 http.HandleFunc("/css/", cssHandler) |
| 671 http.HandleFunc("/js/", jsHandler) | 670 http.HandleFunc("/js/", jsHandler) |
| 672 // TODO Break out /c/ as it's own handler. | 671 // TODO Break out /c/ as it's own handler. |
| 673 http.HandleFunc("/", mainHandler) | 672 http.HandleFunc("/", mainHandler) |
| 674 log.Fatal(http.ListenAndServe(*port, nil)) | 673 log.Fatal(http.ListenAndServe(*port, nil)) |
| 675 } | 674 } |
| OLD | NEW |