import (
"bytes"
- "compress/gzip"
"crypto/sha1"
_ "embed"
"encoding/hex"
"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing"
"github.com/go-git/go-git/v5/plumbing/object"
+ "github.com/klauspost/compress/zstd"
"github.com/vorlif/spreak"
"go.stargrave.org/sgblog"
"go.stargrave.org/sgblog/cmd/sgblog/atom"
return lineURLize(urlPrefix.(string), line.(string))
}
-func startHeader(etag hash.Hash, gziped bool) string {
+func startHeader(etag hash.Hash, zstded bool) string {
lines := []string{
"Content-Type: text/html; charset=utf-8",
"ETag: " + etagString(etag),
}
- if gziped {
- lines = append(lines, "Content-Encoding: gzip")
+ if zstded {
+ lines = append(lines, "Content-Encoding: zstd")
}
lines = append(lines, "")
lines = append(lines, "")
var outBuf bytes.Buffer
var out io.Writer
out = &outBuf
- var gzipWriter *gzip.Writer
+ var zstdWriter *zstd.Encoder
acceptEncoding := os.Getenv("HTTP_ACCEPT_ENCODING")
for _, encoding := range strings.Split(acceptEncoding, ", ") {
- if encoding == "gzip" {
- gzipWriter = gzip.NewWriter(&outBuf)
- out = gzipWriter
+ if encoding == "zstd" {
+ zstdWriter, err = zstd.NewWriter(&outBuf, zstd.WithEncoderLevel(zstd.SpeedDefault))
+ if err != nil {
+ panic(err)
+ }
+ out = zstdWriter
}
}
if offsetPrev < 0 {
offsetPrev = 0
}
- os.Stdout.Write([]byte(startHeader(etagHash, gzipWriter != nil)))
+ os.Stdout.Write([]byte(startHeader(etagHash, zstdWriter != nil)))
err = TmplHTMLIndex.Execute(out, struct {
T *spreak.Localizer
Version string
}
os.Stdout.WriteString("Content-Type: text/plain; charset=utf-8\n")
os.Stdout.WriteString("ETag: " + etagString(etagHash) + "\n")
- if gzipWriter != nil {
- os.Stdout.WriteString("Content-Encoding: gzip\n")
- gzipWriter.Close()
+ if zstdWriter != nil {
+ os.Stdout.WriteString("Content-Encoding: zstd\n")
+ zstdWriter.Close()
}
os.Stdout.WriteString("\n")
os.Stdout.Write(outBuf.Bytes())
notesLines = strings.Split(string(notesRaw), "\n")
}
- os.Stdout.Write([]byte(startHeader(etagHash, gzipWriter != nil)))
+ os.Stdout.Write([]byte(startHeader(etagHash, zstdWriter != nil)))
err = TmplHTMLEntry.Execute(out, struct {
T *spreak.Localizer
Version string
makeErr(errors.New("unknown URL action"), http.StatusNotFound)
}
out.Write([]byte("</body></html>\n"))
- if gzipWriter != nil {
- gzipWriter.Close()
+ if zstdWriter != nil {
+ zstdWriter.Close()
}
os.Stdout.Write(outBuf.Bytes())
return
AtomFinish:
os.Stdout.WriteString("Content-Type: application/atom+xml; charset=utf-8\n")
os.Stdout.WriteString("ETag: " + etagString(etagHash) + "\n")
- if gzipWriter != nil {
- os.Stdout.WriteString("Content-Encoding: gzip\n")
- gzipWriter.Close()
+ if zstdWriter != nil {
+ os.Stdout.WriteString("Content-Encoding: zstd\n")
+ zstdWriter.Close()
}
os.Stdout.WriteString("\n")
os.Stdout.Write(outBuf.Bytes())