2019-11-24 20:57:52 +03:00
// Copyright 2019 The Gitea 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 repository
import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification"
)
// GenerateRepository generates a repository from a template
func GenerateRepository ( doer , owner * models . User , templateRepo * models . Repository , opts models . GenerateRepoOptions ) ( _ * models . Repository , err error ) {
var generateRepo * models . Repository
if err = models . WithTx ( func ( ctx models . DBContext ) error {
generateRepo , err = models . GenerateRepository ( ctx , doer , owner , templateRepo , opts )
if err != nil {
return err
}
// Git Content
if opts . GitContent && ! templateRepo . IsEmpty {
if err = models . GenerateGitContent ( ctx , templateRepo , generateRepo ) ; err != nil {
return err
}
}
// Topics
if opts . Topics {
if err = models . GenerateTopics ( ctx , templateRepo , generateRepo ) ; err != nil {
return err
}
}
// Git Hooks
if opts . GitHooks {
if err = models . GenerateGitHooks ( ctx , templateRepo , generateRepo ) ; err != nil {
return err
}
}
// Webhooks
if opts . Webhooks {
if err = models . GenerateWebhooks ( ctx , templateRepo , generateRepo ) ; err != nil {
return err
}
}
2019-11-25 08:17:51 +03:00
// Avatar
if opts . Avatar && len ( templateRepo . Avatar ) > 0 {
if err = models . GenerateAvatar ( ctx , templateRepo , generateRepo ) ; err != nil {
return err
}
}
// Issue Labels
if opts . IssueLabels {
if err = models . GenerateIssueLabels ( ctx , templateRepo , generateRepo ) ; err != nil {
return err
}
}
2019-11-24 20:57:52 +03:00
return nil
} ) ; err != nil {
if generateRepo != nil {
if errDelete := models . DeleteRepository ( doer , owner . ID , generateRepo . ID ) ; errDelete != nil {
log . Error ( "Rollback deleteRepository: %v" , errDelete )
}
}
return nil , err
}
notification . NotifyCreateRepository ( doer , owner , generateRepo )
return generateRepo , nil
}