import (
"bufio"
- "encoding/json"
"errors"
"fmt"
"io"
- "io/ioutil"
"log"
+ "net/url"
"os"
"strconv"
"strings"
"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/hjson/hjson-go"
"go.stargrave.org/sgblog"
)
{{.Note}}{{end -}}
{{- if .Cfg.CommentsEmail}}
------------------------------------------------------------------------
-leave comment: mailto:{{.Cfg.CommentsEmail}}?subject={{.Commit.Hash.String}}
+leave comment: mailto:{{.Cfg.CommentsEmail}}?subject={{.TitleEscaped}}
{{end}}{{range $idx, $comment := .Comments}}
------------------------------------------------------------------------
comment {{$idx}}:
Topics []string
}
-func serveGopher() {
- cfgPath := os.Args[2]
- cfgRaw, err := ioutil.ReadFile(cfgPath)
+func serveGopher(cfgPath string) {
+ cfg, err := readCfg(cfgPath)
if err != nil {
log.Fatalln(err)
}
- var cfgGeneral map[string]interface{}
- if err = hjson.Unmarshal(cfgRaw, &cfgGeneral); err != nil {
- log.Fatalln(err)
- }
- cfgRaw, err = json.Marshal(cfgGeneral)
- if err != nil {
- log.Fatalln(err)
- }
- var cfg *Cfg
- if err = json.Unmarshal(cfgRaw, &cfg); err != nil {
- log.Fatalln(err)
- }
if cfg.GopherDomain == "" {
log.Fatalln("GopherDomain is not configured")
}
}
tmpl := template.Must(template.New("entry").Parse(TmplGopherEntry))
err = tmpl.Execute(os.Stdout, struct {
- Commit *object.Commit
- When string
- Cfg *Cfg
- Note string
- Comments []string
- Topics []string
- Version string
+ Commit *object.Commit
+ When string
+ Cfg *Cfg
+ Note string
+ Comments []string
+ Topics []string
+ Version string
+ TitleEscaped string
}{
Commit: commit,
When: commit.Author.When.Format(sgblog.WhenFmt),
Cfg: cfg,
- Note: string(getNote(notesTree, commit.Hash)),
- Comments: parseComments(getNote(commentsTree, commit.Hash)),
- Topics: parseTopics(getNote(topicsTree, commit.Hash)),
+ Note: string(sgblog.GetNote(repo, notesTree, commit.Hash)),
+ Comments: sgblog.ParseComments(sgblog.GetNote(repo, commentsTree, commit.Hash)),
+ Topics: sgblog.ParseTopics(sgblog.GetNote(repo, topicsTree, commit.Hash)),
Version: sgblog.Version,
+ TitleEscaped: url.PathEscape(fmt.Sprintf(
+ "Re: %s (%s)", msgSplit(commit.Message)[0], commit.Hash,
+ )),
})
if err != nil {
log.Fatalln(err)
}
- } else if selectorParts[len(selectorParts)-2] == "offset" {
+ } else if len(selectorParts) > 1 &&
+ selectorParts[len(selectorParts)-2] == "offset" {
offset, err := strconv.Atoi(selectorParts[len(selectorParts)-1])
if err != nil {
log.Fatalln(err)
Commit: commit,
Title: lines[0],
LinesNum: len(lines) - 2,
- CommentsNum: len(parseComments(getNote(commentsTree, commit.Hash))),
- Topics: parseTopics(getNote(topicsTree, commit.Hash)),
+ CommentsNum: len(sgblog.ParseComments(sgblog.GetNote(repo, commentsTree, commit.Hash))),
+ Topics: sgblog.ParseTopics(sgblog.GetNote(repo, topicsTree, commit.Hash)),
})
}
tmpl := template.Must(template.New("menu").Parse(TmplGopherMenu))