diff --git a/integrations/api_repo_test.go b/integrations/api_repo_test.go index 7cabd51add..8798fe0914 100644 --- a/integrations/api_repo_test.go +++ b/integrations/api_repo_test.go @@ -450,6 +450,7 @@ func TestAPIRepoTransfer(t *testing.T) { {ctxUserID: 1, newOwner: "user2", teams: &[]int64{2}, expectedStatus: http.StatusUnprocessableEntity}, {ctxUserID: 1, newOwner: "user3", teams: &[]int64{5}, expectedStatus: http.StatusForbidden}, {ctxUserID: 1, newOwner: "user3", teams: &[]int64{2}, expectedStatus: http.StatusAccepted}, + {ctxUserID: 2, newOwner: "user2", teams: nil, expectedStatus: http.StatusAccepted}, } defer prepareTestEnv(t)() diff --git a/services/repository/transfer.go b/services/repository/transfer.go index a80f8635bb..05f7a56b01 100644 --- a/services/repository/transfer.go +++ b/services/repository/transfer.go @@ -80,8 +80,8 @@ func StartRepositoryTransfer(doer, newOwner *models.User, repo *models.Repositor return fmt.Errorf("repository is not ready for transfer") } - // Admin is always allowed to transfer - if doer.IsAdmin { + // Admin is always allowed to transfer || user transfer repo back to his account + if doer.IsAdmin || doer.ID == newOwner.ID { return TransferOwnership(doer, newOwner, repo, teams) }