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"
2020-01-12 15:11:17 +03:00
repo_module "code.gitea.io/gitea/modules/repository"
2019-11-24 20:57:52 +03:00
)
// 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 {
2020-01-12 15:11:17 +03:00
generateRepo , err = repo_module . GenerateRepository ( ctx , doer , owner , templateRepo , opts )
2019-11-24 20:57:52 +03:00
if err != nil {
return err
}
// Git Content
if opts . GitContent && ! templateRepo . IsEmpty {
2020-01-12 15:11:17 +03:00
if err = repo_module . GenerateGitContent ( ctx , templateRepo , generateRepo ) ; err != nil {
2019-11-24 20:57:52 +03:00
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 {
2020-09-25 07:09:23 +03:00
if generateRepo != nil && generateRepo . ID > 0 {
2019-11-24 20:57:52 +03:00
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
}