diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2019-11-15 16:06:11 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-15 16:06:11 +0800 |
commit | 21ae9838e04233bbf9930d368d935fd1f9b68c34 (patch) | |
tree | 610abb6f1ec2df235d469276b36f6d26e00e4653 /services/repository/transfer.go | |
parent | b30d744e0986dcf716d4f57dac8c72a494bb226b (diff) | |
download | gitea-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.go | 54 |
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 +} |