diff options
author | jladbrook <jhladbrook@gmail.com> | 2023-04-25 15:08:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-25 22:08:29 +0800 |
commit | 56d4893b2a996da6388801c9c8ff16b9b588ad55 (patch) | |
tree | a9d18045562cb8c6f370cc07c6ba57e6cbe93afb /routers/web/feed | |
parent | f16b66898091b3f375cbd3e2796fd87d9c5ca10b (diff) | |
download | gitea-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.go | 50 | ||||
-rw-r--r-- | routers/web/feed/file.go | 56 | ||||
-rw-r--r-- | routers/web/feed/render.go | 22 |
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) +} |