diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2019-10-26 14:54:11 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-26 14:54:11 +0800 |
commit | 9e85358777ea4bd345f832d08b19915a72cc128b (patch) | |
tree | 56116e7a6acbfd91a29cade7f753802f9ea561ea /services/repository/repository.go | |
parent | d2d5910894cfe513f8aa331b30c991db6fbe8e6d (diff) | |
download | gitea-9e85358777ea4bd345f832d08b19915a72cc128b.tar.gz gitea-9e85358777ea4bd345f832d08b19915a72cc128b.zip |
Move some repositories' operations to a standalone service package (#8557)
* Move some repositories' operations to a standalone service package
* improve code
* remove unused codes
* add rollback when fork failed
* add repo when return
Diffstat (limited to 'services/repository/repository.go')
-rw-r--r-- | services/repository/repository.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/services/repository/repository.go b/services/repository/repository.go new file mode 100644 index 0000000000..5135435c78 --- /dev/null +++ b/services/repository/repository.go @@ -0,0 +1,56 @@ +// 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" +) + +// CreateRepository creates a repository for the user/organization. +func CreateRepository(doer, owner *models.User, opts models.CreateRepoOptions) (*models.Repository, error) { + repo, err := models.CreateRepository(doer, owner, opts) + if err != nil { + if repo != nil { + if errDelete := models.DeleteRepository(doer, owner.ID, repo.ID); errDelete != nil { + log.Error("Rollback deleteRepository: %v", errDelete) + } + } + return nil, err + } + + notification.NotifyCreateRepository(doer, owner, repo) + + return repo, nil +} + +// ForkRepository forks a repository +func ForkRepository(doer, u *models.User, oldRepo *models.Repository, name, desc string) (*models.Repository, error) { + repo, err := models.ForkRepository(doer, u, oldRepo, name, desc) + if err != nil { + if repo != nil { + if errDelete := models.DeleteRepository(doer, u.ID, repo.ID); errDelete != nil { + log.Error("Rollback deleteRepository: %v", errDelete) + } + } + 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 { + if err := models.DeleteRepository(doer, repo.OwnerID, repo.ID); err != nil { + return err + } + + notification.NotifyDeleteRepository(doer, repo) + + return nil +} |