Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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