2019-10-26 09:54:11 +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 (
2019-12-15 05:49:52 +03:00
"fmt"
2019-10-26 09:54:11 +03:00
"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"
2020-01-25 05:48:22 +03:00
pull_service "code.gitea.io/gitea/services/pull"
2019-10-26 09:54:11 +03:00
)
// CreateRepository creates a repository for the user/organization.
func CreateRepository ( doer , owner * models . User , opts models . CreateRepoOptions ) ( * models . Repository , error ) {
2020-01-12 15:11:17 +03:00
repo , err := repo_module . CreateRepository ( doer , owner , opts )
2019-10-26 09:54:11 +03:00
if err != nil {
2020-09-25 07:09:23 +03:00
// No need to rollback here we should do this in CreateRepository...
2019-10-26 09:54:11 +03:00
return nil , err
}
notification . NotifyCreateRepository ( doer , owner , repo )
return repo , nil
}
2020-09-25 07:09:23 +03:00
// AdoptRepository adopts pre-existing repository files for the user/organization.
func AdoptRepository ( doer , owner * models . User , opts models . CreateRepoOptions ) ( * models . Repository , error ) {
repo , err := repo_module . AdoptRepository ( doer , owner , opts )
if err != nil {
// No need to rollback here we should do this in AdoptRepository...
return nil , err
}
notification . NotifyCreateRepository ( doer , owner , repo )
return repo , nil
}
// DeleteUnadoptedRepository adopts pre-existing repository files for the user/organization.
func DeleteUnadoptedRepository ( doer , owner * models . User , name string ) error {
return repo_module . DeleteUnadoptedRepository ( doer , owner , name )
}
2019-10-26 09:54:11 +03:00
// ForkRepository forks a repository
func ForkRepository ( doer , u * models . User , oldRepo * models . Repository , name , desc string ) ( * models . Repository , error ) {
2020-01-12 15:11:17 +03:00
repo , err := repo_module . ForkRepository ( doer , u , oldRepo , name , desc )
2019-10-26 09:54:11 +03:00
if err != nil {
return nil , err
}
notification . NotifyForkRepository ( doer , oldRepo , repo )
return repo , nil
}
// DeleteRepository deletes a repository for a user or organization.
func DeleteRepository ( doer * models . User , repo * models . Repository ) error {
2020-01-25 05:48:22 +03:00
if err := pull_service . CloseRepoBranchesPulls ( doer , repo ) ; err != nil {
log . Error ( "CloseRepoBranchesPulls failed: %v" , err )
}
2019-10-26 09:54:11 +03:00
if err := models . DeleteRepository ( doer , repo . OwnerID , repo . ID ) ; err != nil {
return err
}
notification . NotifyDeleteRepository ( doer , repo )
return nil
}
2019-12-15 05:49:52 +03:00
// PushCreateRepo creates a repository when a new repository is pushed to an appropriate namespace
func PushCreateRepo ( authUser , owner * models . User , repoName string ) ( * models . Repository , error ) {
if ! authUser . IsAdmin {
if owner . IsOrganization ( ) {
if ok , err := owner . CanCreateOrgRepo ( authUser . ID ) ; err != nil {
return nil , err
} else if ! ok {
return nil , fmt . Errorf ( "cannot push-create repository for org" )
}
} else if authUser . ID != owner . ID {
return nil , fmt . Errorf ( "cannot push-create repository for another user" )
}
}
repo , err := CreateRepository ( authUser , owner , models . CreateRepoOptions {
Name : repoName ,
IsPrivate : true ,
} )
if err != nil {
return nil , err
}
return repo , nil
}
2020-09-11 17:14:48 +03:00
// NewContext start repository service
func NewContext ( ) error {
return initPushQueue ( )
}