Unknwon 10 anni fa
parent
commit
1aa12c7452

+ 6 - 0
public/ng/css/gogs.css

@@ -1489,6 +1489,12 @@ The register and sign-in page style
   font-family: Consolas, Menlo, Monaco, "Lucida Console", monospace;
   font-size: 14px;
 }
+.commit-list .message {
+  width: 60%;
+}
+.commit-list .message span {
+  max-width: 500px;
+}
 .diff-head-box {
   margin-top: 10px;
 }

+ 6 - 0
public/ng/less/gogs/repository.less

@@ -523,6 +523,12 @@
         font-family: Consolas, Menlo, Monaco, "Lucida Console", monospace;
         font-size: 14px;
     }
+    .message {
+        width: 60%;
+        span {
+            max-width: 500px;
+        }
+    }
 }
 .diff-head-box {
     margin-top: 10px;

+ 31 - 10
routers/repo/http.go

@@ -6,6 +6,7 @@ package repo
 
 import (
 	"bytes"
+	"compress/gzip"
 	"encoding/base64"
 	"errors"
 	"fmt"
@@ -283,23 +284,42 @@ func serviceReceivePack(hr handler) {
 
 func serviceRpc(rpc string, hr handler) {
 	w, r, dir := hr.w, hr.r, hr.Dir
-	access := hasAccess(r, hr.Config, dir, rpc, true)
 
+	access := hasAccess(r, hr.Config, dir, rpc, true)
 	if access == false {
 		renderNoAccess(w)
 		return
 	}
 
 	w.Header().Set("Content-Type", fmt.Sprintf("application/x-git-%s-result", rpc))
-	w.WriteHeader(http.StatusOK)
 
-	var input []byte
-	var br io.Reader
+	var (
+		reqBody = r.Body
+		input   []byte
+		br      io.Reader
+		err     error
+	)
+
+	// Handle GZIP.
+	if r.Header.Get("Content-Encoding") == "gzip" {
+		reqBody, err = gzip.NewReader(reqBody)
+		if err != nil {
+			log.GitLogger.Error(2, "fail to create gzip reader: %v", err)
+			w.WriteHeader(http.StatusInternalServerError)
+			return
+		}
+	}
+
 	if hr.Config.OnSucceed != nil {
-		input, _ = ioutil.ReadAll(r.Body)
+		input, err = ioutil.ReadAll(reqBody)
+		if err != nil {
+			log.GitLogger.Error(2, "fail to read request body: %v", err)
+			w.WriteHeader(http.StatusInternalServerError)
+			return
+		}
 		br = bytes.NewReader(input)
 	} else {
-		br = r.Body
+		br = reqBody
 	}
 
 	args := []string{rpc, "--stateless-rpc", dir}
@@ -308,15 +328,16 @@ func serviceRpc(rpc string, hr handler) {
 	cmd.Stdout = w
 	cmd.Stdin = br
 
-	err := cmd.Run()
-	if err != nil {
-		log.GitLogger.Error(4, err.Error())
+	if err := cmd.Run(); err != nil {
+		log.GitLogger.Error(2, "fail to serve RPC(%s): %v", rpc, err)
+		w.WriteHeader(http.StatusInternalServerError)
 		return
 	}
 
 	if hr.Config.OnSucceed != nil {
 		hr.Config.OnSucceed(rpc, input)
 	}
+	w.WriteHeader(http.StatusOK)
 }
 
 func getInfoRefs(hr handler) {
@@ -372,7 +393,7 @@ func sendFile(contentType string, hr handler) {
 	w, r := hr.w, hr.r
 	reqFile := path.Join(hr.Dir, hr.File)
 
-	//fmt.Println("sendFile:", reqFile)
+	// fmt.Println("sendFile:", reqFile)
 
 	f, err := os.Stat(reqFile)
 	if os.IsNotExist(err) {

+ 1 - 1
templates/repo/commits_table.tmpl

@@ -26,7 +26,7 @@
             <tr>
                 <td class="author"><img class="avatar-20" src="{{AvatarLink .Author.Email}}" alt=""/>&nbsp;&nbsp;&nbsp;{{if .UserName}}<a href="{{AppSubUrl}}/{{.UserName}}">{{.Author.Name}}</a>{{else}}{{.Author.Name}}{{end}}</td>
                 <td class="sha"><a rel="nofollow" class="label label-green" href="{{AppSubUrl}}/{{$username}}/{{$reponame}}/commit/{{.Id}} ">{{SubStr .Id.String 0 10}} </a></td>
-                <td class="message">{{.Summary}} </td>
+                <td class="message"><span class="text-truncate">{{.Summary}}</span></td>
                 <td class="date">{{TimeSince .Author.When $.Lang}}</td>
             </tr>
             {{end}}