| @@ -365,7 +365,8 @@ func HTTP(ctx *context.Context) { | |||
| ctx.NotFound("Smart Git HTTP", err) | |||
| return | |||
| } | |||
| route.handler(serviceHandler{cfg, w, r, dir, file, cfg.Env, repo}) | |||
| route.handler(serviceHandler{cfg, w, r, dir, file, cfg.Env}) | |||
| return | |||
| } | |||
| } | |||
| @@ -428,7 +429,6 @@ type serviceHandler struct { | |||
| dir string | |||
| file string | |||
| environ []string | |||
| repo *models.Repository | |||
| } | |||
| func (h *serviceHandler) setHeaderNoCache() { | |||
| @@ -546,19 +546,6 @@ func serviceRPC(h serviceHandler, service string) { | |||
| 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 | |||
| h.environ = append(h.environ, "SSH_ORIGINAL_COMMAND="+service) | |||
| @@ -573,7 +560,7 @@ func serviceRPC(h serviceHandler, service string) { | |||
| } | |||
| cmd.Stdout = h.w | |||
| cmd.Stdin = bytes.NewReader(content) | |||
| cmd.Stdin = reqBody | |||
| cmd.Stderr = &stderr | |||
| 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) { | |||
| serviceRPC(h, "upload-pack") | |||
| } | |||