all repos — elgit @ 5cbb4fc46c7a909a0491f4aa8b841177c3de5929

fork of legit: web frontend for git, written in go

make request body streaming optional

Alan Pearce
commit

5cbb4fc46c7a909a0491f4aa8b841177c3de5929

parent

8f562b78446b9fb5bfc73a6f41788647a3779189

1 file changed, 13 insertions(+), 6 deletions(-)

changed files
M routes/git.goroutes/git.go
@@ -3,6 +3,7 @@
import ( "bytes" "compress/gzip" + "io" "log" "net/http" "path"
@@ -59,18 +60,24 @@ rc.Response.Header.Set("Connection", "Keep-Alive")
rc.Response.Header.Set("Transfer-Encoding", "chunked") rc.Response.Header.Set("Cache-Control", "no-cache") - var reader = rc.Request.BodyStream() - if bytes.Contains(rc.Request.Header.ContentEncoding(), []byte("gzip")) { - reader, err = gzip.NewReader(reader) - if err != nil { - return rc.ErrorResponse(err, 500) - } + var reader io.Reader + if rc.Request.IsBodyStream() { + reader = rc.Request.BodyStream() defer func() { err := rc.Request.CloseBodyStream() if err != nil { log.Printf("git: failed to close gzip reader: %s", err) } }() + } else { + reader = bytes.NewReader(rc.Request.Body()) + } + + if bytes.Contains(rc.Request.Header.ContentEncoding(), []byte("gzip")) { + reader, err = gzip.NewReader(reader) + if err != nil { + return rc.ErrorResponse(err, 500) + } } cmd := service.Command{