gitea源码

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package feed
  4. import (
  5. "time"
  6. "code.gitea.io/gitea/models/db"
  7. repo_model "code.gitea.io/gitea/models/repo"
  8. "code.gitea.io/gitea/services/context"
  9. "github.com/gorilla/feeds"
  10. )
  11. // shows tags and/or releases on the repo as RSS / Atom feed
  12. func ShowReleaseFeed(ctx *context.Context, repo *repo_model.Repository, isReleasesOnly bool, formatType string) {
  13. releases, err := db.Find[repo_model.Release](ctx, repo_model.FindReleasesOptions{
  14. IncludeTags: !isReleasesOnly,
  15. RepoID: ctx.Repo.Repository.ID,
  16. })
  17. if err != nil {
  18. ctx.ServerError("GetReleasesByRepoID", err)
  19. return
  20. }
  21. var title string
  22. var link *feeds.Link
  23. if isReleasesOnly {
  24. title = ctx.Locale.TrString("repo.release.releases_for", repo.FullName())
  25. link = &feeds.Link{Href: repo.HTMLURL() + "/release"}
  26. } else {
  27. title = ctx.Locale.TrString("repo.release.tags_for", repo.FullName())
  28. link = &feeds.Link{Href: repo.HTMLURL() + "/tags"}
  29. }
  30. feed := &feeds.Feed{
  31. Title: title,
  32. Link: link,
  33. Description: repo.Description,
  34. Created: time.Now(),
  35. }
  36. feed.Items, err = releasesToFeedItems(ctx, releases)
  37. if err != nil {
  38. ctx.ServerError("releasesToFeedItems", err)
  39. return
  40. }
  41. writeFeed(ctx, feed, formatType)
  42. }