| @@ -7,7 +7,6 @@ package repo | |||||
| import ( | import ( | ||||
| "bytes" | "bytes" | ||||
| "fmt" | "fmt" | ||||
| "io" | |||||
| "io/ioutil" | "io/ioutil" | ||||
| "net/http" | "net/http" | ||||
| "os" | "os" | ||||
| @@ -193,7 +192,6 @@ var routes = []route{ | |||||
| // Request handling function | // Request handling function | ||||
| func HttpBackend(config *Config) http.HandlerFunc { | func HttpBackend(config *Config) http.HandlerFunc { | ||||
| return func(w http.ResponseWriter, r *http.Request) { | return func(w http.ResponseWriter, r *http.Request) { | ||||
| //log.GitLogger.Printf("%s %s %s %s", r.RemoteAddr, r.Method, r.URL.Path, r.Proto) | |||||
| for _, route := range routes { | for _, route := range routes { | ||||
| if m := route.cr.FindStringSubmatch(r.URL.Path); m != nil { | if m := route.cr.FindStringSubmatch(r.URL.Path); m != nil { | ||||
| if route.method != r.Method { | if route.method != r.Method { | ||||
| @@ -215,13 +213,13 @@ func HttpBackend(config *Config) http.HandlerFunc { | |||||
| return | return | ||||
| } | } | ||||
| } | } | ||||
| renderNotFound(w) | renderNotFound(w) | ||||
| return | return | ||||
| } | } | ||||
| } | } | ||||
| // Actual command handling functions | // Actual command handling functions | ||||
| func serviceUploadPack(hr handler) { | func serviceUploadPack(hr handler) { | ||||
| serviceRpc("upload-pack", hr) | serviceRpc("upload-pack", hr) | ||||
| } | } | ||||
| @@ -239,36 +237,24 @@ func serviceRpc(rpc string, hr handler) { | |||||
| return | return | ||||
| } | } | ||||
| input, _ := ioutil.ReadAll(r.Body) | |||||
| w.Header().Set("Content-Type", fmt.Sprintf("application/x-git-%s-result", rpc)) | w.Header().Set("Content-Type", fmt.Sprintf("application/x-git-%s-result", rpc)) | ||||
| w.WriteHeader(http.StatusOK) | w.WriteHeader(http.StatusOK) | ||||
| input, _ := ioutil.ReadAll(r.Body) | |||||
| br := bytes.NewReader(input) | |||||
| args := []string{rpc, "--stateless-rpc", dir} | args := []string{rpc, "--stateless-rpc", dir} | ||||
| cmd := exec.Command(hr.Config.GitBinPath, args...) | cmd := exec.Command(hr.Config.GitBinPath, args...) | ||||
| cmd.Dir = dir | cmd.Dir = dir | ||||
| in, err := cmd.StdinPipe() | |||||
| if err != nil { | |||||
| log.GitLogger.Error(err.Error()) | |||||
| return | |||||
| } | |||||
| stdout, err := cmd.StdoutPipe() | |||||
| if err != nil { | |||||
| log.GitLogger.Error(err.Error()) | |||||
| return | |||||
| } | |||||
| cmd.Stdout = w | |||||
| cmd.Stdin = br | |||||
| err = cmd.Start() | |||||
| err := cmd.Run() | |||||
| if err != nil { | if err != nil { | ||||
| log.GitLogger.Error(err.Error()) | log.GitLogger.Error(err.Error()) | ||||
| return | return | ||||
| } | } | ||||
| in.Write(input) | |||||
| io.Copy(w, stdout) | |||||
| cmd.Wait() | |||||
| if hr.Config.OnSucceed != nil { | if hr.Config.OnSucceed != nil { | ||||
| hr.Config.OnSucceed(rpc, input) | hr.Config.OnSucceed(rpc, input) | ||||
| } | } | ||||