// 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" ) // PushUpdateDeleteTagsContext updates a number of delete tags with context func PushUpdateDeleteTagsContext(ctx DBContext, repo *Repository, tags []string) error { return pushUpdateDeleteTags(ctx.e, repo, tags) } func pushUpdateDeleteTags(e 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 = x.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 = x.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 = x.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 = x.ID(rel.ID).AllCols().Update(rel); err != nil { return fmt.Errorf("Update: %v", err) } } return nil }