From 48c101affe78396db89caada28f883ef5fac20a6 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Wed, 27 Feb 2019 19:51:46 -0800 Subject: [PATCH] Create a repo redirect when transferring ownership (#6210) (#6211) When transferring ownership of a repo to a different user/org, create a repo redirect that points to the new location in the same way that is done when a repo is renamed. Signed-off-by: James E. Blair --- modules/context/repo.go | 2 +- routers/repo/setting.go | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/context/repo.go b/modules/context/repo.go index 07873a3c6..8f4377b04 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -204,7 +204,7 @@ func RedirectToRepo(ctx *Context, redirectRepoID int64) { redirectPath := strings.Replace( ctx.Req.URL.Path, fmt.Sprintf("%s/%s", ownerName, previousRepoName), - fmt.Sprintf("%s/%s", ownerName, repo.Name), + fmt.Sprintf("%s/%s", repo.MustOwnerName(), repo.Name), 1, ) ctx.Redirect(redirectPath) diff --git a/routers/repo/setting.go b/routers/repo/setting.go index 809aab27a..853c34311 100644 --- a/routers/repo/setting.go +++ b/routers/repo/setting.go @@ -321,6 +321,7 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) { return } + oldOwnerID := ctx.Repo.Owner.ID if err = models.TransferOwnership(ctx.User, newOwner, repo); err != nil { if models.IsErrRepoAlreadyExist(err) { ctx.RenderWithErr(ctx.Tr("repo.settings.new_owner_has_same_repo"), tplSettingsOptions, nil) @@ -329,6 +330,13 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) { } return } + + err = models.NewRepoRedirect(oldOwnerID, repo.ID, repo.Name, repo.Name) + if err != nil { + ctx.ServerError("NewRepoRedirect", err) + return + } + log.Trace("Repository transferred: %s/%s -> %s", ctx.Repo.Owner.Name, repo.Name, newOwner) ctx.Flash.Success(ctx.Tr("repo.settings.transfer_succeed")) ctx.Redirect(setting.AppSubURL + "/" + newOwner + "/" + repo.Name)