2014-04-27 11:05:13 +04:00
// 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.
2014-04-11 06:27:13 +04:00
package models
import (
2014-06-24 00:22:34 +04:00
"fmt"
2014-04-11 06:27:13 +04:00
"strings"
2017-02-25 17:54:40 +03:00
)
2014-06-28 19:56:41 +04:00
2019-12-26 14:29:45 +03:00
// PushUpdateDeleteTags updates a number of delete tags
func PushUpdateDeleteTags ( repo * Repository , tags [ ] string ) error {
sess := x . NewSession ( )
defer sess . Close ( )
if err := sess . Begin ( ) ; err != nil {
return fmt . Errorf ( "Unable to begin sess in PushUpdateDeleteTags: %v" , err )
}
if err := pushUpdateDeleteTags ( sess , repo , tags ) ; err != nil {
return err
}
return sess . Commit ( )
}
2020-02-03 11:47:04 +03:00
// PushUpdateDeleteTagsContext updates a number of delete tags with context
func PushUpdateDeleteTagsContext ( ctx DBContext , repo * Repository , tags [ ] string ) error {
return pushUpdateDeleteTags ( ctx . e , repo , tags )
}
2019-12-26 14:29:45 +03:00
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 ) .
2019-12-27 17:18:07 +03:00
Cols ( "is_draft" , "num_commits" , "sha1" ) .
Update ( & Release {
IsDraft : true ,
} ) ; err != nil {
2019-12-26 14:29:45 +03:00
return fmt . Errorf ( "Update: %v" , err )
}
return nil
}
2019-07-24 10:13:26 +03:00
// PushUpdateDeleteTag must be called for any push actions to delete tag
func PushUpdateDeleteTag ( repo * Repository , tagName string ) error {
2017-09-20 08:26:49 +03:00
rel , err := GetRelease ( repo . ID , tagName )
if err != nil {
if IsErrReleaseNotExist ( err ) {
return nil
}
return fmt . Errorf ( "GetRelease: %v" , err )
}
if rel . IsTag {
2017-10-05 07:43:04 +03:00
if _ , err = x . ID ( rel . ID ) . Delete ( new ( Release ) ) ; err != nil {
2017-09-20 08:26:49 +03:00
return fmt . Errorf ( "Delete: %v" , err )
}
} else {
rel . IsDraft = true
rel . NumCommits = 0
rel . Sha1 = ""
2017-10-05 07:43:04 +03:00
if _ , err = x . ID ( rel . ID ) . AllCols ( ) . Update ( rel ) ; err != nil {
2017-09-20 08:26:49 +03:00
return fmt . Errorf ( "Update: %v" , err )
}
}
return nil
}
2020-01-10 12:34:21 +03:00
// 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 )
2017-09-20 08:26:49 +03:00
if err != nil && ! IsErrReleaseNotExist ( err ) {
return fmt . Errorf ( "GetRelease: %v" , err )
}
if rel == nil {
2020-01-10 12:34:21 +03:00
rel = newRel
if _ , err = x . Insert ( rel ) ; err != nil {
2017-09-20 08:26:49 +03:00
return fmt . Errorf ( "InsertOne: %v" , err )
}
} else {
2020-01-10 12:34:21 +03:00
rel . Sha1 = newRel . Sha1
rel . CreatedUnix = newRel . CreatedUnix
rel . NumCommits = newRel . NumCommits
2017-09-20 08:26:49 +03:00
rel . IsDraft = false
2020-01-10 12:34:21 +03:00
if rel . IsTag && newRel . PublisherID > 0 {
rel . PublisherID = newRel . PublisherID
2017-09-20 08:26:49 +03:00
}
2017-10-05 07:43:04 +03:00
if _ , err = x . ID ( rel . ID ) . AllCols ( ) . Update ( rel ) ; err != nil {
2017-09-20 08:26:49 +03:00
return fmt . Errorf ( "Update: %v" , err )
}
}
return nil
}