make request body streaming optional
1 file changed, 13 insertions(+), 6 deletions(-)
changed files
M routes/git.go → routes/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{