You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

label.go 2.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. // Copyright 2016 The Gogs Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package repo
  5. import (
  6. api "code.gitea.io/sdk/gitea"
  7. "code.gitea.io/gitea/models"
  8. "code.gitea.io/gitea/modules/context"
  9. )
  10. // ListLabels list all the labels of a repository
  11. func ListLabels(ctx *context.APIContext) {
  12. labels, err := models.GetLabelsByRepoID(ctx.Repo.Repository.ID)
  13. if err != nil {
  14. ctx.Error(500, "GetLabelsByRepoID", err)
  15. return
  16. }
  17. apiLabels := make([]*api.Label, len(labels))
  18. for i := range labels {
  19. apiLabels[i] = labels[i].APIFormat()
  20. }
  21. ctx.JSON(200, &apiLabels)
  22. }
  23. // GetLabel get label by repository and label id
  24. func GetLabel(ctx *context.APIContext) {
  25. label, err := models.GetLabelInRepoByID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id"))
  26. if err != nil {
  27. if models.IsErrLabelNotExist(err) {
  28. ctx.Status(404)
  29. } else {
  30. ctx.Error(500, "GetLabelByRepoID", err)
  31. }
  32. return
  33. }
  34. ctx.JSON(200, label.APIFormat())
  35. }
  36. // CreateLabel create a label for a repository
  37. func CreateLabel(ctx *context.APIContext, form api.CreateLabelOption) {
  38. if !ctx.Repo.IsWriter() {
  39. ctx.Status(403)
  40. return
  41. }
  42. label := &models.Label{
  43. Name: form.Name,
  44. Color: form.Color,
  45. RepoID: ctx.Repo.Repository.ID,
  46. }
  47. if err := models.NewLabels(label); err != nil {
  48. ctx.Error(500, "NewLabel", err)
  49. return
  50. }
  51. ctx.JSON(201, label.APIFormat())
  52. }
  53. // EditLabel modify a label for a repository
  54. func EditLabel(ctx *context.APIContext, form api.EditLabelOption) {
  55. if !ctx.Repo.IsWriter() {
  56. ctx.Status(403)
  57. return
  58. }
  59. label, err := models.GetLabelInRepoByID(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id"))
  60. if err != nil {
  61. if models.IsErrLabelNotExist(err) {
  62. ctx.Status(404)
  63. } else {
  64. ctx.Error(500, "GetLabelByRepoID", err)
  65. }
  66. return
  67. }
  68. if form.Name != nil {
  69. label.Name = *form.Name
  70. }
  71. if form.Color != nil {
  72. label.Color = *form.Color
  73. }
  74. if err := models.UpdateLabel(label); err != nil {
  75. ctx.Handle(500, "UpdateLabel", err)
  76. return
  77. }
  78. ctx.JSON(200, label.APIFormat())
  79. }
  80. // DeleteLabel delete a label for a repository
  81. func DeleteLabel(ctx *context.APIContext) {
  82. if !ctx.Repo.IsWriter() {
  83. ctx.Status(403)
  84. return
  85. }
  86. if err := models.DeleteLabel(ctx.Repo.Repository.ID, ctx.ParamsInt64(":id")); err != nil {
  87. ctx.Error(500, "DeleteLabel", err)
  88. return
  89. }
  90. ctx.Status(204)
  91. }