summaryrefslogtreecommitdiffstats
path: root/services/repository/transfer.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2019-11-15 16:06:11 +0800
committerGitHub <noreply@github.com>2019-11-15 16:06:11 +0800
commit21ae9838e04233bbf9930d368d935fd1f9b68c34 (patch)
tree610abb6f1ec2df235d469276b36f6d26e00e4653 /services/repository/transfer.go
parentb30d744e0986dcf716d4f57dac8c72a494bb226b (diff)
downloadgitea-21ae9838e04233bbf9930d368d935fd1f9b68c34.tar.gz
gitea-21ae9838e04233bbf9930d368d935fd1f9b68c34.zip
Move transfer repository and rename repository on a service package and start action notification (#8573)
* move transfer repository and rename repository on a service package and start action notification * remove unused codes * fix lint * fix bugs * fix test * fix test * fix test * fix lint * update go mod and sum
Diffstat (limited to 'services/repository/transfer.go')
-rw-r--r--services/repository/transfer.go54
1 files changed, 54 insertions, 0 deletions
diff --git a/services/repository/transfer.go b/services/repository/transfer.go
new file mode 100644
index 0000000000..2d20dcd1a2
--- /dev/null
+++ b/services/repository/transfer.go
@@ -0,0 +1,54 @@
+// 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 (
+ "fmt"
+
+ "code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/modules/notification"
+)
+
+// TransferOwnership transfers all corresponding setting from old user to new one.
+func TransferOwnership(doer *models.User, newOwnerName string, repo *models.Repository) error {
+ if err := repo.GetOwner(); err != nil {
+ return err
+ }
+
+ oldOwner := repo.Owner
+
+ if err := models.TransferOwnership(doer, newOwnerName, repo); err != nil {
+ return err
+ }
+
+ if err := models.NewRepoRedirect(oldOwner.ID, repo.ID, repo.Name, repo.Name); err != nil {
+ return fmt.Errorf("NewRepoRedirect: %v", err)
+ }
+
+ notification.NotifyTransferRepository(doer, repo, oldOwner.Name)
+
+ return nil
+}
+
+// ChangeRepositoryName changes all corresponding setting from old repository name to new one.
+func ChangeRepositoryName(doer *models.User, repo *models.Repository, newRepoName string) error {
+ oldRepoName := repo.Name
+
+ if err := models.ChangeRepositoryName(doer, repo, newRepoName); err != nil {
+ return err
+ }
+
+ if err := repo.GetOwner(); err != nil {
+ return err
+ }
+
+ if err := models.NewRepoRedirect(repo.Owner.ID, repo.ID, oldRepoName, newRepoName); err != nil {
+ return err
+ }
+
+ notification.NotifyRenameRepository(doer, repo, oldRepoName)
+
+ return nil
+}