浏览代码

editor: fix cannot redirect to correct pull request URL

Was only possible to correctly redirect to pull request page within
same repository. And didn't take care of case when upstream has
disabled pull request.

Also add a new method 'PullRequestURL' to unify the code.
Unknwon 8 年之前
父节点
当前提交
5ec21d56ef
共有 2 个文件被更改,包括 16 次插入6 次删除
  1. 10 0
      modules/context/repo.go
  2. 6 6
      routers/repo/editor.go

+ 10 - 0
modules/context/repo.go

@@ -98,6 +98,16 @@ func (r *Repository) GetEditorconfig() (*editorconfig.Editorconfig, error) {
 	return editorconfig.ParseBytes(data)
 }
 
+// PullRequestURL returns URL for composing a pull request.
+// This function does not check if the repository can actually compose a pull request.
+func (r *Repository) PullRequestURL(baseBranch, headBranch string) string {
+	repoLink := r.RepoLink
+	if r.PullRequest.BaseRepo != nil {
+		repoLink = r.PullRequest.BaseRepo.Link()
+	}
+	return fmt.Sprintf("%s/compare/%s...%s:%s", repoLink, baseBranch, r.Owner.Name, headBranch)
+}
+
 func RetrieveBaseRepo(ctx *Context, repo *models.Repository) {
 	// Non-fork repository will not return error in this method.
 	if err := repo.GetBaseRepo(); err != nil {

+ 6 - 6
routers/repo/editor.go

@@ -279,8 +279,8 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo
 		return
 	}
 
-	if form.IsNewBrnach() {
-		ctx.Redirect(ctx.Repo.RepoLink + "/compare/" + oldBranchName + "..." + form.NewBranchName)
+	if form.IsNewBrnach() && ctx.Repo.PullRequest.Allowed {
+		ctx.Redirect(ctx.Repo.PullRequestURL(oldBranchName, form.NewBranchName))
 	} else {
 		ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + template.EscapePound(form.TreePath))
 	}
@@ -382,8 +382,8 @@ func DeleteFilePost(ctx *context.Context, form auth.DeleteRepoFileForm) {
 		return
 	}
 
-	if form.IsNewBrnach() {
-		ctx.Redirect(ctx.Repo.RepoLink + "/compare/" + oldBranchName + "..." + form.NewBranchName)
+	if form.IsNewBrnach() && ctx.Repo.PullRequest.Allowed {
+		ctx.Redirect(ctx.Repo.PullRequestURL(oldBranchName, form.NewBranchName))
 	} else {
 		ctx.Flash.Success(ctx.Tr("repo.editor.file_delete_success", ctx.Repo.TreePath))
 		ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName)
@@ -503,8 +503,8 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) {
 		return
 	}
 
-	if form.IsNewBrnach() {
-		ctx.Redirect(ctx.Repo.RepoLink + "/compare/" + oldBranchName + "..." + form.NewBranchName)
+	if form.IsNewBrnach() && ctx.Repo.PullRequest.Allowed {
+		ctx.Redirect(ctx.Repo.PullRequestURL(oldBranchName, form.NewBranchName))
 	} else {
 		ctx.Redirect(ctx.Repo.RepoLink + "/src/" + branchName + "/" + form.TreePath)
 	}