X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=cmd%2Fsgblog%2Fhttp.go;h=000037ab210e666decf8880593d58aaab31be7af;hb=HEAD;hp=2e0c2d8dea5080bcd1ecc726807106245412e8e6;hpb=3e7374904765c5d4fb82b0c2b7028b3b731f0fc3;p=sgblog.git diff --git a/cmd/sgblog/http.go b/cmd/sgblog/http.go index 2e0c2d8..837320b 100644 --- a/cmd/sgblog/http.go +++ b/cmd/sgblog/http.go @@ -1,5 +1,5 @@ // SGBlog -- Git-backed CGI/UCSPI blogging/phlogging/gemlogging engine -// Copyright (C) 2020-2024 Sergey Matveev +// Copyright (C) 2020-2025 Sergey Matveev // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as @@ -19,7 +19,7 @@ import ( "bytes" "crypto/sha1" _ "embed" - "encoding/hex" + "encoding/base64" "encoding/xml" "errors" "fmt" @@ -38,6 +38,7 @@ import ( "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/go-git/go-git/v5/plumbing/storer" "github.com/klauspost/compress/zstd" "github.com/vorlif/spreak" "go.stargrave.org/sgblog" @@ -79,8 +80,8 @@ type TableEntry struct { Commit *object.Commit CommentsRaw []byte TopicsRaw []byte - Num int Title string + Num int LinesNum int CommentsNum int ImagesNum int @@ -98,7 +99,7 @@ func makeA(href, text string) string { } func etagString(etag hash.Hash) string { - return `"` + hex.EncodeToString(etag.Sum(nil)) + `"` + return `"` + base64.RawURLEncoding.EncodeToString(etag.Sum(nil)) + `"` } func urlParse(what string) *url.URL { @@ -122,7 +123,7 @@ func lineURLize(urlPrefix, line string) string { return strings.Join(cols, " ") } -func lineURLizeInTemplate(urlPrefix, line interface{}) string { +func lineURLizeInTemplate(urlPrefix, line any) string { return lineURLize(urlPrefix.(string), line.(string)) } @@ -214,7 +215,9 @@ func serveHTTP() { makeErr(err, http.StatusInternalServerError) } - if notes, err := repo.Notes(); err == nil { + var notes storer.ReferenceIter + notes, err = repo.Notes() + if err == nil { var notesRef *plumbing.Reference var commentsRef *plumbing.Reference notes.ForEach(func(ref *plumbing.Reference) error { @@ -227,12 +230,16 @@ func serveHTTP() { return nil }) if notesRef != nil { - if commentsCommit, err := repo.CommitObject(notesRef.Hash()); err == nil { + var commentsCommit *object.Commit + commentsCommit, err = repo.CommitObject(notesRef.Hash()) + if err == nil { notesTree, _ = commentsCommit.Tree() } } if commentsRef != nil { - if commentsCommit, err := repo.CommitObject(commentsRef.Hash()); err == nil { + var commentsCommit *object.Commit + commentsCommit, err = repo.CommitObject(commentsRef.Hash()) + if err == nil { commentsTree, _ = commentsCommit.Tree() } } @@ -243,7 +250,7 @@ func serveHTTP() { out = &outBuf var zstdWriter *zstd.Encoder acceptEncoding := os.Getenv("HTTP_ACCEPT_ENCODING") - for _, encoding := range strings.Split(acceptEncoding, ", ") { + for encoding := range strings.SplitSeq(acceptEncoding, ", ") { if encoding == "zstd" { zstdWriter, err = zstd.NewWriter(&outBuf, zstd.WithEncoderLevel(zstd.SpeedDefault)) if err != nil { @@ -289,7 +296,7 @@ func serveHTTP() { } commits = &HashesIter{hashes} } else { - for i := 0; i < offset; i++ { + for range offset { if _, err = repoLog.Next(); err != nil { break } @@ -305,8 +312,9 @@ func serveHTTP() { } etagHash.Write([]byte("INDEX")) etagHash.Write([]byte(topic)) - for i := 0; i < PageEntries; i++ { - commit, err := commits.Next() + for range PageEntries { + var commit *object.Commit + commit, err = commits.Next() if err != nil { logEnded = true break @@ -342,10 +350,7 @@ func serveHTTP() { entry.Topics = sgblog.ParseTopics(entry.TopicsRaw) entries[i] = entry } - offsetPrev := offset - PageEntries - if offsetPrev < 0 { - offsetPrev = 0 - } + offsetPrev := max(offset-PageEntries, 0) os.Stdout.Write([]byte(startHeader(etagHash, zstdWriter != nil))) err = TmplHTMLIndex.Execute(out, struct { T *spreak.Localizer @@ -393,7 +398,7 @@ func serveHTTP() { if err != nil { makeErr(err, http.StatusInternalServerError) } - for i := 0; i < PageEntries; i++ { + for range PageEntries { commit, err = repoLog.Next() if err != nil { break @@ -457,7 +462,8 @@ func serveHTTP() { if topic == "" { commits = repoLog } else { - topicsCache, err := getTopicsCache(cfg, repoLog) + var topicsCache TopicsCache + topicsCache, err = getTopicsCache(cfg, repoLog) if err != nil { makeErr(err, http.StatusInternalServerError) } @@ -468,7 +474,7 @@ func serveHTTP() { commits = &HashesIter{hashes} } - for i := 0; i < PageEntries; i++ { + for range PageEntries { commit, err = commits.Next() if err != nil { break @@ -544,16 +550,18 @@ func serveHTTP() { if err != nil { makeErr(err, http.StatusInternalServerError) } - for i := 0; i < PageEntries; i++ { + for range PageEntries { commit, err = repoLog.Next() if err != nil { break } - fileStats, err := commit.Stats() + var fileStats object.FileStats + fileStats, err = commit.Stats() if err != nil { makeErr(err, http.StatusInternalServerError) } - t, err := commit.Tree() + var t *object.Tree + t, err = commit.Tree() if err != nil { makeErr(err, http.StatusInternalServerError) } @@ -708,7 +716,8 @@ func serveHTTP() { }, }) } - data, err := xml.MarshalIndent(&feed, "", " ") + var data []byte + data, err = xml.MarshalIndent(&feed, "", " ") if err != nil { makeErr(err, http.StatusInternalServerError) } @@ -730,8 +739,8 @@ func serveHTTP() { commentsParsed := sgblog.ParseComments(commentsRaw) comments := make([]CommentEntry, 0, len(commentsParsed)) for _, comment := range commentsParsed { - lines := strings.Split(comment, "\n") - comments = append(comments, CommentEntry{lines[:3], lines[3:]}) + commentLines := strings.Split(comment, "\n") + comments = append(comments, CommentEntry{commentLines[:3], commentLines[3:]}) } var notesLines []string if len(notesRaw) > 0 {