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

update.go 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // Copyright 2014 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 models
  5. import (
  6. "context"
  7. "fmt"
  8. "strings"
  9. "code.gitea.io/gitea/models/db"
  10. )
  11. // PushUpdateDeleteTagsContext updates a number of delete tags with context
  12. func PushUpdateDeleteTagsContext(ctx context.Context, repo *Repository, tags []string) error {
  13. return pushUpdateDeleteTags(db.GetEngine(ctx), repo, tags)
  14. }
  15. func pushUpdateDeleteTags(e db.Engine, repo *Repository, tags []string) error {
  16. if len(tags) == 0 {
  17. return nil
  18. }
  19. lowerTags := make([]string, 0, len(tags))
  20. for _, tag := range tags {
  21. lowerTags = append(lowerTags, strings.ToLower(tag))
  22. }
  23. if _, err := e.
  24. Where("repo_id = ? AND is_tag = ?", repo.ID, true).
  25. In("lower_tag_name", lowerTags).
  26. Delete(new(Release)); err != nil {
  27. return fmt.Errorf("Delete: %v", err)
  28. }
  29. if _, err := e.
  30. Where("repo_id = ? AND is_tag = ?", repo.ID, false).
  31. In("lower_tag_name", lowerTags).
  32. Cols("is_draft", "num_commits", "sha1").
  33. Update(&Release{
  34. IsDraft: true,
  35. }); err != nil {
  36. return fmt.Errorf("Update: %v", err)
  37. }
  38. return nil
  39. }
  40. // PushUpdateDeleteTag must be called for any push actions to delete tag
  41. func PushUpdateDeleteTag(repo *Repository, tagName string) error {
  42. rel, err := GetRelease(repo.ID, tagName)
  43. if err != nil {
  44. if IsErrReleaseNotExist(err) {
  45. return nil
  46. }
  47. return fmt.Errorf("GetRelease: %v", err)
  48. }
  49. if rel.IsTag {
  50. if _, err = db.GetEngine(db.DefaultContext).ID(rel.ID).Delete(new(Release)); err != nil {
  51. return fmt.Errorf("Delete: %v", err)
  52. }
  53. } else {
  54. rel.IsDraft = true
  55. rel.NumCommits = 0
  56. rel.Sha1 = ""
  57. if _, err = db.GetEngine(db.DefaultContext).ID(rel.ID).AllCols().Update(rel); err != nil {
  58. return fmt.Errorf("Update: %v", err)
  59. }
  60. }
  61. return nil
  62. }
  63. // SaveOrUpdateTag must be called for any push actions to add tag
  64. func SaveOrUpdateTag(repo *Repository, newRel *Release) error {
  65. rel, err := GetRelease(repo.ID, newRel.TagName)
  66. if err != nil && !IsErrReleaseNotExist(err) {
  67. return fmt.Errorf("GetRelease: %v", err)
  68. }
  69. if rel == nil {
  70. rel = newRel
  71. if _, err = db.GetEngine(db.DefaultContext).Insert(rel); err != nil {
  72. return fmt.Errorf("InsertOne: %v", err)
  73. }
  74. } else {
  75. rel.Sha1 = newRel.Sha1
  76. rel.CreatedUnix = newRel.CreatedUnix
  77. rel.NumCommits = newRel.NumCommits
  78. rel.IsDraft = false
  79. if rel.IsTag && newRel.PublisherID > 0 {
  80. rel.PublisherID = newRel.PublisherID
  81. }
  82. if _, err = db.GetEngine(db.DefaultContext).ID(rel.ID).AllCols().Update(rel); err != nil {
  83. return fmt.Errorf("Update: %v", err)
  84. }
  85. }
  86. return nil
  87. }