aboutsummaryrefslogtreecommitdiffstats
path: root/routers/web/feed
diff options
context:
space:
mode:
authorjladbrook <jhladbrook@gmail.com>2023-04-25 15:08:29 +0100
committerGitHub <noreply@github.com>2023-04-25 22:08:29 +0800
commit56d4893b2a996da6388801c9c8ff16b9b588ad55 (patch)
treea9d18045562cb8c6f370cc07c6ba57e6cbe93afb /routers/web/feed
parentf16b66898091b3f375cbd3e2796fd87d9c5ca10b (diff)
downloadgitea-56d4893b2a996da6388801c9c8ff16b9b588ad55.tar.gz
gitea-56d4893b2a996da6388801c9c8ff16b9b588ad55.zip
Add RSS Feeds for branches and files (#22719)
Fix #22228 adding RSS feeds for branches and files. RSS feeds are accessed through: * [gitea]/src/branch/{branch}.rss * [gitea]/src/branch/{branch}/{file_name}.rss No changes have been made to the UI to expose the feed urls for branches and files.
Diffstat (limited to 'routers/web/feed')
-rw-r--r--routers/web/feed/branch.go50
-rw-r--r--routers/web/feed/file.go56
-rw-r--r--routers/web/feed/render.go22
3 files changed, 128 insertions, 0 deletions
diff --git a/routers/web/feed/branch.go b/routers/web/feed/branch.go
new file mode 100644
index 0000000000..fb9d2a7351
--- /dev/null
+++ b/routers/web/feed/branch.go
@@ -0,0 +1,50 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package feed
+
+import (
+ "fmt"
+ "strings"
+ "time"
+
+ "code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/modules/context"
+
+ "github.com/gorilla/feeds"
+)
+
+// ShowBranchFeed shows tags and/or releases on the repo as RSS / Atom feed
+func ShowBranchFeed(ctx *context.Context, repo *repo.Repository, formatType string) {
+ commits, err := ctx.Repo.Commit.CommitsByRange(0, 10)
+ if err != nil {
+ ctx.ServerError("ShowBranchFeed %s", err)
+ return
+ }
+
+ title := fmt.Sprintf("Latest commits for branch %s", ctx.Repo.BranchName)
+ link := &feeds.Link{Href: repo.HTMLURL() + "/" + ctx.Repo.BranchNameSubURL()}
+
+ feed := &feeds.Feed{
+ Title: title,
+ Link: link,
+ Description: repo.Description,
+ Created: time.Now(),
+ }
+
+ for _, commit := range commits {
+ feed.Items = append(feed.Items, &feeds.Item{
+ Id: commit.ID.String(),
+ Title: strings.TrimSpace(strings.Split(commit.Message(), "\n")[0]),
+ Link: &feeds.Link{Href: repo.HTMLURL() + "/commit/" + commit.ID.String()},
+ Author: &feeds.Author{
+ Name: commit.Author.Name,
+ Email: commit.Author.Email,
+ },
+ Description: commit.Message(),
+ Content: commit.Message(),
+ })
+ }
+
+ writeFeed(ctx, feed, formatType)
+}
diff --git a/routers/web/feed/file.go b/routers/web/feed/file.go
new file mode 100644
index 0000000000..3dc9a4e27f
--- /dev/null
+++ b/routers/web/feed/file.go
@@ -0,0 +1,56 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package feed
+
+import (
+ "fmt"
+ "strings"
+ "time"
+
+ "code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/modules/context"
+ "code.gitea.io/gitea/modules/util"
+
+ "github.com/gorilla/feeds"
+)
+
+// ShowFileFeed shows tags and/or releases on the repo as RSS / Atom feed
+func ShowFileFeed(ctx *context.Context, repo *repo.Repository, formatType string) {
+ fileName := ctx.Repo.TreePath
+ if len(fileName) == 0 {
+ return
+ }
+ commits, err := ctx.Repo.GitRepo.CommitsByFileAndRange(ctx.Repo.RefName, fileName, 1)
+ if err != nil {
+ ctx.ServerError("ShowBranchFeed %s", err)
+ return
+ }
+
+ title := fmt.Sprintf("Latest commits for file %s", ctx.Repo.TreePath)
+
+ link := &feeds.Link{Href: repo.HTMLURL() + "/" + ctx.Repo.BranchNameSubURL() + "/" + util.PathEscapeSegments(ctx.Repo.TreePath)}
+
+ feed := &feeds.Feed{
+ Title: title,
+ Link: link,
+ Description: repo.Description,
+ Created: time.Now(),
+ }
+
+ for _, commit := range commits {
+ feed.Items = append(feed.Items, &feeds.Item{
+ Id: commit.ID.String(),
+ Title: strings.TrimSpace(strings.Split(commit.Message(), "\n")[0]),
+ Link: &feeds.Link{Href: repo.HTMLURL() + "/commit/" + commit.ID.String()},
+ Author: &feeds.Author{
+ Name: commit.Author.Name,
+ Email: commit.Author.Email,
+ },
+ Description: commit.Message(),
+ Content: commit.Message(),
+ })
+ }
+
+ writeFeed(ctx, feed, formatType)
+}
diff --git a/routers/web/feed/render.go b/routers/web/feed/render.go
new file mode 100644
index 0000000000..0f327f87f2
--- /dev/null
+++ b/routers/web/feed/render.go
@@ -0,0 +1,22 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package feed
+
+import (
+ model "code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/modules/context"
+)
+
+// RenderBranchFeed render format for branch or file
+func RenderBranchFeed(ctx *context.Context) {
+ _, _, showFeedType := GetFeedType(ctx.Params(":reponame"), ctx.Req)
+ var renderer func(ctx *context.Context, repo *model.Repository, formatType string)
+ switch {
+ case ctx.Repo.TreePath == "":
+ renderer = ShowBranchFeed
+ case ctx.Repo.TreePath != "":
+ renderer = ShowFileFeed
+ }
+ renderer(ctx, ctx.Repo.Repository, showFeedType)
+}