+ })
+ }
+ data, err := xml.MarshalIndent(&feed, "", " ")
+ if err != nil {
+ makeErr(err)
+ }
+ out.Write(data)
+ goto AtomFinish
+ } else if pathInfo == "/"+AtomCommentsFeed {
+ commit, err := repo.CommitObject(commentsRef.Hash())
+ if err != nil {
+ makeErr(err)
+ }
+ etagHash.Write([]byte("ATOM COMMENTS"))
+ etagHash.Write(commit.Hash[:])
+ checkETag(etagHash)
+ idHasher, err := blake2b.New256(nil)
+ if err != nil {
+ panic(err)
+ }
+ idHasher.Write([]byte("ATOM COMMENTS"))
+ idHasher.Write([]byte(cfg.AtomId))
+ feed := atom.Feed{
+ Title: cfg.Title + " comments",
+ ID: "urn:uuid:" + bytes2uuid(idHasher.Sum(nil)),
+ Updated: atom.Time(commit.Author.When),
+ Link: []atom.Link{{Rel: "self", Href: atomCommentsURL}},
+ Author: &atom.Person{Name: cfg.AtomAuthor},
+ }
+ repoLog, err := repo.Log(&git.LogOptions{From: commentsRef.Hash()})
+ if err != nil {
+ makeErr(err)
+ }
+ for i := 0; i < PageEntries; i++ {
+ commit, err = repoLog.Next()
+ if err != nil {
+ break
+ }
+ fileStats, err := commit.Stats()
+ if err != nil {
+ makeErr(err)
+ }
+ t, err := commit.Tree()
+ if err != nil {
+ makeErr(err)
+ }
+ commentedHash := plumbing.NewHash(strings.ReplaceAll(
+ fileStats[0].Name, "/", "",
+ ))
+ comments := parseComments(getNote(t, commentedHash))
+ commit, err = repo.CommitObject(commentedHash)
+ if err != nil {
+ makeErr(err)
+ }
+ commentN := strconv.Itoa(len(comments) - 1)
+ lines := strings.Split(comments[len(comments)-1], "\n")
+ from := strings.TrimPrefix(lines[0], "From: ")
+ date := strings.TrimPrefix(lines[1], "Date: ")
+ idHasher.Reset()
+ idHasher.Write([]byte("COMMENT"))
+ idHasher.Write(commit.Hash[:])
+ idHasher.Write([]byte(commentN))
+ feed.Entry = append(feed.Entry, &atom.Entry{
+ Title: strings.Join([]string{
+ "Comment ", commentN,
+ " for \"", msgSplit(commit.Message)[0],
+ "\" by ", from,
+ }, ""),
+ Author: &atom.Person{Name: from},
+ ID: "urn:uuid:" + bytes2uuid(idHasher.Sum(nil)),
+ Link: []atom.Link{{
+ Rel: "alternate",
+ Href: strings.Join([]string{
+ cfg.AtomBaseURL, cfg.URLPrefix, "/",
+ commit.Hash.String(), "#comment", commentN,
+ }, ""),
+ }},
+ Published: atom.TimeStr(date),
+ Updated: atom.TimeStr(date),