2014-04-27 01:05:13 -06: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 10:27:13 +08:00
package models
import (
2014-06-23 16:22:34 -04:00
"fmt"
2014-04-11 10:27:13 +08:00
"strings"
2017-02-25 22:54:40 +08:00
)
2014-06-28 23:56:41 +08:00
2020-02-03 16:47:04 +08: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 11:29:45 +00: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 22:18:07 +08:00
Cols ( "is_draft" , "num_commits" , "sha1" ) .
Update ( & Release {
IsDraft : true ,
} ) ; err != nil {
2019-12-26 11:29:45 +00:00
return fmt . Errorf ( "Update: %v" , err )
}
return nil
}
2019-07-24 15:13:26 +08: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-04 21:43:04 -07: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-04 21:43:04 -07: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 17:34:21 +08: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 17:34:21 +08: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 17:34:21 +08: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 17:34:21 +08:00
if rel . IsTag && newRel . PublisherID > 0 {
rel . PublisherID = newRel . PublisherID
2017-09-20 08:26:49 +03:00
}
2017-10-04 21:43:04 -07: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
}