| @@ -365,7 +365,8 @@ func HTTP(ctx *context.Context) { | |||||
| ctx.NotFound("Smart Git HTTP", err) | ctx.NotFound("Smart Git HTTP", err) | ||||
| return | return | ||||
| } | } | ||||
| route.handler(serviceHandler{cfg, w, r, dir, file, cfg.Env, repo}) | |||||
| route.handler(serviceHandler{cfg, w, r, dir, file, cfg.Env}) | |||||
| return | return | ||||
| } | } | ||||
| } | } | ||||
| @@ -428,7 +429,6 @@ type serviceHandler struct { | |||||
| dir string | dir string | ||||
| file string | file string | ||||
| environ []string | environ []string | ||||
| repo *models.Repository | |||||
| } | } | ||||
| func (h *serviceHandler) setHeaderNoCache() { | func (h *serviceHandler) setHeaderNoCache() { | ||||
| @@ -546,19 +546,6 @@ func serviceRPC(h serviceHandler, service string) { | |||||
| return | return | ||||
| } | } | ||||
| } | } | ||||
| content, _ := ioutil.ReadAll(reqBody) | |||||
| //check size | |||||
| if service == "receive-pack" { | |||||
| if err := repo_service.CheckPushSizeLimit4Http(h.repo, int64(len(content))); err != nil { | |||||
| h.w.WriteHeader(http.StatusOK) | |||||
| str := GenerateGitErrorBody(err.Error()) | |||||
| h.w.Write([]byte(str)) | |||||
| if h.w.Header().Get("Content-Type") == "" { | |||||
| h.w.Header().Set("Content-Type", "application/x-git-receive-pack-result") | |||||
| } | |||||
| return | |||||
| } | |||||
| } | |||||
| // set this for allow pre-receive and post-receive execute | // set this for allow pre-receive and post-receive execute | ||||
| h.environ = append(h.environ, "SSH_ORIGINAL_COMMAND="+service) | h.environ = append(h.environ, "SSH_ORIGINAL_COMMAND="+service) | ||||
| @@ -573,7 +560,7 @@ func serviceRPC(h serviceHandler, service string) { | |||||
| } | } | ||||
| cmd.Stdout = h.w | cmd.Stdout = h.w | ||||
| cmd.Stdin = bytes.NewReader(content) | |||||
| cmd.Stdin = reqBody | |||||
| cmd.Stderr = &stderr | cmd.Stderr = &stderr | ||||
| pid := process.GetManager().Add(fmt.Sprintf("%s %s %s [repo_path: %s]", git.GitExecutable, service, "--stateless-rpc", h.dir), cancel) | pid := process.GetManager().Add(fmt.Sprintf("%s %s %s [repo_path: %s]", git.GitExecutable, service, "--stateless-rpc", h.dir), cancel) | ||||
| @@ -585,41 +572,6 @@ func serviceRPC(h serviceHandler, service string) { | |||||
| } | } | ||||
| } | } | ||||
| func GenerateGitErrorBody(content string) string { | |||||
| var builder strings.Builder | |||||
| builder.WriteString(GenerateErrStartPKTLine()) | |||||
| builder.WriteString(GeneratePKTLine(content)) | |||||
| builder.WriteString(GenerateEndPKTLine()) | |||||
| return builder.String() | |||||
| } | |||||
| func GeneratePKTLine(content string) string { | |||||
| //\033[31m ... \033[0m | |||||
| //mark the text red in shell | |||||
| content = "\u0002\033[31m " + content + " \033[0m" | |||||
| l := len(content) | |||||
| prefixLength := 4 | |||||
| suffix := "\n" | |||||
| f := strconv.FormatInt(int64(l+prefixLength+len(suffix)), 16) | |||||
| lf := len(f) | |||||
| if lf == 1 { | |||||
| f = "000" + f | |||||
| } else if lf == 2 { | |||||
| f = "00" + f | |||||
| } else if lf == 3 { | |||||
| f = "0" + f | |||||
| } | |||||
| return f + content + suffix | |||||
| } | |||||
| func GenerateEndPKTLine() string { | |||||
| return "0000" | |||||
| } | |||||
| func GenerateErrStartPKTLine() string { | |||||
| return "0031\u0001000eunpack err\n0019ok refs/heads/master\n0000" | |||||
| } | |||||
| func serviceUploadPack(h serviceHandler) { | func serviceUploadPack(h serviceHandler) { | ||||
| serviceRPC(h, "upload-pack") | serviceRPC(h, "upload-pack") | ||||
| } | } | ||||