mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-11-24 10:46:10 +01:00
a4bfef265d
* Move db related basic functions to models/db * Fix lint * Fix lint * Fix test * Fix lint * Fix lint * revert unnecessary change * Fix test * Fix wrong replace string * Use *Context * Correct committer spelling and fix wrong replaced words Co-authored-by: zeripath <art27@cantab.net>
99 lines
2.6 KiB
Go
99 lines
2.6 KiB
Go
// Copyright 2014 The Gogs Authors. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package models
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"code.gitea.io/gitea/models/db"
|
|
)
|
|
|
|
// PushUpdateDeleteTagsContext updates a number of delete tags with context
|
|
func PushUpdateDeleteTagsContext(ctx *db.Context, repo *Repository, tags []string) error {
|
|
return pushUpdateDeleteTags(ctx.Engine(), repo, tags)
|
|
}
|
|
|
|
func pushUpdateDeleteTags(e db.Engine, repo *Repository, tags []string) error {
|
|
if len(tags) == 0 {
|
|
return nil
|
|
}
|
|
lowerTags := make([]string, 0, len(tags))
|
|
for _, tag := range tags {
|
|
lowerTags = append(lowerTags, strings.ToLower(tag))
|
|
}
|
|
|
|
if _, err := e.
|
|
Where("repo_id = ? AND is_tag = ?", repo.ID, true).
|
|
In("lower_tag_name", lowerTags).
|
|
Delete(new(Release)); err != nil {
|
|
return fmt.Errorf("Delete: %v", err)
|
|
}
|
|
|
|
if _, err := e.
|
|
Where("repo_id = ? AND is_tag = ?", repo.ID, false).
|
|
In("lower_tag_name", lowerTags).
|
|
Cols("is_draft", "num_commits", "sha1").
|
|
Update(&Release{
|
|
IsDraft: true,
|
|
}); err != nil {
|
|
return fmt.Errorf("Update: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// PushUpdateDeleteTag must be called for any push actions to delete tag
|
|
func PushUpdateDeleteTag(repo *Repository, tagName string) error {
|
|
rel, err := GetRelease(repo.ID, tagName)
|
|
if err != nil {
|
|
if IsErrReleaseNotExist(err) {
|
|
return nil
|
|
}
|
|
return fmt.Errorf("GetRelease: %v", err)
|
|
}
|
|
if rel.IsTag {
|
|
if _, err = db.DefaultContext().Engine().ID(rel.ID).Delete(new(Release)); err != nil {
|
|
return fmt.Errorf("Delete: %v", err)
|
|
}
|
|
} else {
|
|
rel.IsDraft = true
|
|
rel.NumCommits = 0
|
|
rel.Sha1 = ""
|
|
if _, err = db.DefaultContext().Engine().ID(rel.ID).AllCols().Update(rel); err != nil {
|
|
return fmt.Errorf("Update: %v", err)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// SaveOrUpdateTag must be called for any push actions to add tag
|
|
func SaveOrUpdateTag(repo *Repository, newRel *Release) error {
|
|
rel, err := GetRelease(repo.ID, newRel.TagName)
|
|
if err != nil && !IsErrReleaseNotExist(err) {
|
|
return fmt.Errorf("GetRelease: %v", err)
|
|
}
|
|
|
|
if rel == nil {
|
|
rel = newRel
|
|
if _, err = db.DefaultContext().Engine().Insert(rel); err != nil {
|
|
return fmt.Errorf("InsertOne: %v", err)
|
|
}
|
|
} else {
|
|
rel.Sha1 = newRel.Sha1
|
|
rel.CreatedUnix = newRel.CreatedUnix
|
|
rel.NumCommits = newRel.NumCommits
|
|
rel.IsDraft = false
|
|
if rel.IsTag && newRel.PublisherID > 0 {
|
|
rel.PublisherID = newRel.PublisherID
|
|
}
|
|
if _, err = db.DefaultContext().Engine().ID(rel.ID).AllCols().Update(rel); err != nil {
|
|
return fmt.Errorf("Update: %v", err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|