all repos

mugit @ 43a845886b6094d672e39a46de5c58551bafcaac

🐮 git server that your cow will love

mugit/internal/handlers/feed.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
dont set repo description as tag description, 3 months ago
1
package handlers
2
3
import (
4
	"net/http"
5
	"net/url"
6
7
	"github.com/gorilla/feeds"
8
)
9
10
func (h *handlers) repoFeedHandler(w http.ResponseWriter, r *http.Request) {
11
	repo, err := h.openPublicRepo(r.PathValue("name"), "")
12
	if err != nil {
13
		h.write404(w, err)
14
		return
15
	}
16
17
	desc, err := repo.Description()
18
	if err != nil {
19
		h.write500(w, err)
20
		return
21
	}
22
23
	repoName := repo.Name()
24
25
	feedLink, err := url.JoinPath("http://", h.c.Meta.Host, repoName)
26
	if err != nil {
27
		h.write500(w, err)
28
		return
29
	}
30
31
	feed := &feeds.Feed{
32
		Title:       repoName,
33
		Link:        &feeds.Link{Href: feedLink},
34
		Description: desc,
35
	}
36
37
	// branches
38
	branches, err := repo.Branches()
39
	if err != nil {
40
		h.write500(w, err)
41
		return
42
	}
43
44
	for _, branch := range branches {
45
		href, _ := url.JoinPath("http://", h.c.Meta.Host, repoName, "tree", branch.Name)
46
		feed.Items = append(feed.Items, &feeds.Item{
47
			Id:      "b:" + branch.Name,
48
			Title:   "branch: " + branch.Name,
49
			Link:    &feeds.Link{Href: href},
50
			Updated: branch.LastUpdate,
51
		})
52
	}
53
54
	// tags
55
	tags, err := repo.Tags()
56
	if err != nil {
57
		h.write500(w, err)
58
	}
59
60
	for _, tag := range tags {
61
		href, _ := url.JoinPath("http://", h.c.Meta.Host, repoName, "tree", tag.Name())
62
		feed.Items = append(feed.Items, &feeds.Item{
63
			Id:      "t:" + tag.Name(),
64
			Title:   "tag: " + tag.Name(),
65
			Link:    &feeds.Link{Href: href},
66
			Updated: tag.When(),
67
			Content: tag.Message(),
68
		})
69
	}
70
71
	rss, err := feed.ToRss()
72
	if err != nil {
73
		h.write500(w, err)
74
		return
75
	}
76
77
	w.Header().Set("Content-Type", "application/rss+xml")
78
	w.Write([]byte(rss))
79
}
80
81
func (h *handlers) indexFeedHandler(w http.ResponseWriter, r *http.Request) {
82
	repos, err := h.listPublicRepos()
83
	if err != nil {
84
		h.write500(w, err)
85
		return
86
	}
87
88
	feedLink, err := url.JoinPath("http://", h.c.Meta.Host)
89
	if err != nil {
90
		h.write500(w, err)
91
		return
92
	}
93
94
	feed := &feeds.Feed{
95
		Title:       h.c.Meta.Host,
96
		Link:        &feeds.Link{Href: feedLink},
97
		Description: h.c.Meta.Description,
98
	}
99
100
	for _, repo := range repos {
101
		href, _ := url.JoinPath("http://", h.c.Meta.Host, repo.Name)
102
		feed.Items = append(feed.Items, &feeds.Item{
103
			Title:       repo.Name,
104
			Link:        &feeds.Link{Href: href},
105
			Description: repo.Desc,
106
			Id:          repo.Name,
107
			Updated:     repo.LastCommit,
108
			Content:     repo.Desc,
109
		})
110
	}
111
112
	rss, err := feed.ToRss()
113
	if err != nil {
114
		h.write500(w, err)
115
		return
116
	}
117
118
	w.Header().Set("Content-Type", "application/rss+xml")
119
	w.Write([]byte(rss))
120
}