grim/hgkeeper

Add documentation on how to run the container. Refs HGKEEPER-6
package hgweb
import (
"bytes"
"io"
"net/http"
)
type cachingResponseWriter struct {
w http.ResponseWriter
wroteHeader bool
statusCode int
written int64
multiWriter io.Writer
cachedBody *bytes.Buffer
}
var _ http.ResponseWriter = (*cachingResponseWriter)(nil)
func newCachingResponseWriter(w http.ResponseWriter) *cachingResponseWriter {
rw := &cachingResponseWriter{
w: w,
cachedBody: &bytes.Buffer{},
}
rw.multiWriter = io.MultiWriter(w, rw.cachedBody)
return rw
}
func (w *cachingResponseWriter) Header() http.Header {
return w.w.Header()
}
func (w *cachingResponseWriter) Write(data []byte) (int, error) {
if !w.wroteHeader {
w.wroteHeader = true
w.statusCode = http.StatusOK
}
l, err := w.multiWriter.Write(data)
w.written += int64(l)
return l, err
}
func (w *cachingResponseWriter) WriteHeader(statusCode int) {
if !w.wroteHeader {
w.wroteHeader = true
w.statusCode = statusCode
}
w.w.WriteHeader(w.statusCode)
}
func (w *cachingResponseWriter) StatusCode() int {
return w.statusCode
}
func (w *cachingResponseWriter) Written() int64 {
return w.written
}
func (w *cachingResponseWriter) Body() []byte {
return w.cachedBody.Bytes()
}