mirror of
https://github.com/go-gitea/gitea.git
synced 2025-05-30 13:25:40 +02:00
Auto expand "New PR" form (#33971)
Follow GitHub's behavior: use `?expand=1` to expand the "New PR" form
This commit is contained in:
parent
25b6f38865
commit
b1e326d09e
@ -303,14 +303,11 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if pr == nil {
|
if pr == nil {
|
||||||
if repo.IsFork {
|
|
||||||
branch = fmt.Sprintf("%s:%s", repo.OwnerName, branch)
|
|
||||||
}
|
|
||||||
results = append(results, private.HookPostReceiveBranchResult{
|
results = append(results, private.HookPostReceiveBranchResult{
|
||||||
Message: setting.Git.PullRequestPushMessage && baseRepo.AllowsPulls(ctx),
|
Message: setting.Git.PullRequestPushMessage && baseRepo.AllowsPulls(ctx),
|
||||||
Create: true,
|
Create: true,
|
||||||
Branch: branch,
|
Branch: branch,
|
||||||
URL: fmt.Sprintf("%s/compare/%s...%s", baseRepo.HTMLURL(), util.PathEscapeSegments(baseRepo.DefaultBranch), util.PathEscapeSegments(branch)),
|
URL: fmt.Sprintf("%s/pulls/new/%s", repo.HTMLURL(), util.PathEscapeSegments(branch)),
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
results = append(results, private.HookPostReceiveBranchResult{
|
results = append(results, private.HookPostReceiveBranchResult{
|
||||||
|
@ -569,19 +569,13 @@ func PrepareCompareDiff(
|
|||||||
ctx *context.Context,
|
ctx *context.Context,
|
||||||
ci *common.CompareInfo,
|
ci *common.CompareInfo,
|
||||||
whitespaceBehavior git.TrustedCmdArgs,
|
whitespaceBehavior git.TrustedCmdArgs,
|
||||||
) bool {
|
) (nothingToCompare bool) {
|
||||||
var (
|
repo := ctx.Repo.Repository
|
||||||
repo = ctx.Repo.Repository
|
|
||||||
err error
|
|
||||||
title string
|
|
||||||
)
|
|
||||||
|
|
||||||
// Get diff information.
|
|
||||||
ctx.Data["CommitRepoLink"] = ci.HeadRepo.Link()
|
|
||||||
|
|
||||||
headCommitID := ci.CompareInfo.HeadCommitID
|
headCommitID := ci.CompareInfo.HeadCommitID
|
||||||
|
|
||||||
|
ctx.Data["CommitRepoLink"] = ci.HeadRepo.Link()
|
||||||
ctx.Data["AfterCommitID"] = headCommitID
|
ctx.Data["AfterCommitID"] = headCommitID
|
||||||
|
ctx.Data["ExpandNewPrForm"] = ctx.FormBool("expand")
|
||||||
|
|
||||||
if (headCommitID == ci.CompareInfo.MergeBase && !ci.DirectComparison) ||
|
if (headCommitID == ci.CompareInfo.MergeBase && !ci.DirectComparison) ||
|
||||||
headCommitID == ci.CompareInfo.BaseCommitID {
|
headCommitID == ci.CompareInfo.BaseCommitID {
|
||||||
@ -670,6 +664,7 @@ func PrepareCompareDiff(
|
|||||||
ctx.Data["Commits"] = commits
|
ctx.Data["Commits"] = commits
|
||||||
ctx.Data["CommitCount"] = len(commits)
|
ctx.Data["CommitCount"] = len(commits)
|
||||||
|
|
||||||
|
title := ci.HeadBranch
|
||||||
if len(commits) == 1 {
|
if len(commits) == 1 {
|
||||||
c := commits[0]
|
c := commits[0]
|
||||||
title = strings.TrimSpace(c.UserCommit.Summary())
|
title = strings.TrimSpace(c.UserCommit.Summary())
|
||||||
@ -678,9 +673,8 @@ func PrepareCompareDiff(
|
|||||||
if len(body) > 1 {
|
if len(body) > 1 {
|
||||||
ctx.Data["content"] = strings.Join(body[1:], "\n")
|
ctx.Data["content"] = strings.Join(body[1:], "\n")
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
title = ci.HeadBranch
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(title) > 255 {
|
if len(title) > 255 {
|
||||||
var trailer string
|
var trailer string
|
||||||
title, trailer = util.EllipsisDisplayStringX(title, 255)
|
title, trailer = util.EllipsisDisplayStringX(title, 255)
|
||||||
@ -745,8 +739,7 @@ func CompareDiff(ctx *context.Context) {
|
|||||||
ctx.Data["OtherCompareSeparator"] = "..."
|
ctx.Data["OtherCompareSeparator"] = "..."
|
||||||
}
|
}
|
||||||
|
|
||||||
nothingToCompare := PrepareCompareDiff(ctx, ci,
|
nothingToCompare := PrepareCompareDiff(ctx, ci, gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string)))
|
||||||
gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string)))
|
|
||||||
if ctx.Written() {
|
if ctx.Written() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -1269,6 +1269,21 @@ func stopTimerIfAvailable(ctx *context.Context, user *user_model.User, issue *is
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func PullsNewRedirect(ctx *context.Context) {
|
||||||
|
branch := ctx.PathParam("*")
|
||||||
|
redirectRepo := ctx.Repo.Repository
|
||||||
|
repo := ctx.Repo.Repository
|
||||||
|
if repo.IsFork {
|
||||||
|
if err := repo.GetBaseRepo(ctx); err != nil {
|
||||||
|
ctx.ServerError("GetBaseRepo", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
redirectRepo = repo.BaseRepo
|
||||||
|
branch = fmt.Sprintf("%s:%s", repo.OwnerName, branch)
|
||||||
|
}
|
||||||
|
ctx.Redirect(fmt.Sprintf("%s/compare/%s...%s?expand=1", redirectRepo.Link(), util.PathEscapeSegments(redirectRepo.DefaultBranch), util.PathEscapeSegments(branch)))
|
||||||
|
}
|
||||||
|
|
||||||
// CompareAndPullRequestPost response for creating pull request
|
// CompareAndPullRequestPost response for creating pull request
|
||||||
func CompareAndPullRequestPost(ctx *context.Context) {
|
func CompareAndPullRequestPost(ctx *context.Context) {
|
||||||
form := web.GetForm(ctx).(*forms.CreateIssueForm)
|
form := web.GetForm(ctx).(*forms.CreateIssueForm)
|
||||||
|
@ -1185,6 +1185,7 @@ func registerRoutes(m *web.Router) {
|
|||||||
m.Combo("/compare/*", repo.MustBeNotEmpty, repo.SetEditorconfigIfExists).
|
m.Combo("/compare/*", repo.MustBeNotEmpty, repo.SetEditorconfigIfExists).
|
||||||
Get(repo.SetDiffViewStyle, repo.SetWhitespaceBehavior, repo.CompareDiff).
|
Get(repo.SetDiffViewStyle, repo.SetWhitespaceBehavior, repo.CompareDiff).
|
||||||
Post(reqSignIn, context.RepoMustNotBeArchived(), reqUnitPullsReader, repo.MustAllowPulls, web.Bind(forms.CreateIssueForm{}), repo.SetWhitespaceBehavior, repo.CompareAndPullRequestPost)
|
Post(reqSignIn, context.RepoMustNotBeArchived(), reqUnitPullsReader, repo.MustAllowPulls, web.Bind(forms.CreateIssueForm{}), repo.SetWhitespaceBehavior, repo.CompareAndPullRequestPost)
|
||||||
|
m.Get("/pulls/new/*", repo.PullsNewRedirect)
|
||||||
}, optSignIn, context.RepoAssignment, reqUnitCodeReader)
|
}, optSignIn, context.RepoAssignment, reqUnitCodeReader)
|
||||||
// end "/{username}/{reponame}": repo code: find, compare, list
|
// end "/{username}/{reponame}": repo code: find, compare, list
|
||||||
|
|
||||||
|
@ -128,13 +128,13 @@
|
|||||||
{{svg "octicon-git-pull-request"}} {{ctx.Locale.Tr "repo.branch.included"}}
|
{{svg "octicon-git-pull-request"}} {{ctx.Locale.Tr "repo.branch.included"}}
|
||||||
</span>
|
</span>
|
||||||
{{else if and (not .DBBranch.IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}}
|
{{else if and (not .DBBranch.IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}}
|
||||||
<a href="{{$.RepoLink}}/compare/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{PathEscape $.Owner.Name}}:{{end}}{{PathEscapeSegments .DBBranch.Name}}">
|
<a href="{{$.RepoLink}}/compare/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{PathEscape $.Owner.Name}}:{{end}}{{PathEscapeSegments .DBBranch.Name}}?expand=1">
|
||||||
<button id="new-pull-request" class="ui compact basic button tw-mr-0">{{if $.CanPull}}{{ctx.Locale.Tr "repo.pulls.compare_changes"}}{{else}}{{ctx.Locale.Tr "action.compare_branch"}}{{end}}</button>
|
<button id="new-pull-request" class="ui compact basic button tw-mr-0">{{if $.CanPull}}{{ctx.Locale.Tr "repo.pulls.compare_changes"}}{{else}}{{ctx.Locale.Tr "action.compare_branch"}}{{end}}</button>
|
||||||
</a>
|
</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
{{else if and .LatestPullRequest.HasMerged .MergeMovedOn}}
|
{{else if and .LatestPullRequest.HasMerged .MergeMovedOn}}
|
||||||
{{if and (not .DBBranch.IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}}
|
{{if and (not .DBBranch.IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}}
|
||||||
<a href="{{$.RepoLink}}/compare/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{PathEscape $.Owner.Name}}:{{end}}{{PathEscapeSegments .DBBranch.Name}}">
|
<a href="{{$.RepoLink}}/compare/{{PathEscapeSegments $.DefaultBranchBranch.DBBranch.Name}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{PathEscape $.Owner.Name}}:{{end}}{{PathEscapeSegments .DBBranch.Name}}?expand=1">
|
||||||
<button id="new-pull-request" class="ui compact basic button tw-mr-0">{{if $.CanPull}}{{ctx.Locale.Tr "repo.pulls.compare_changes"}}{{else}}{{ctx.Locale.Tr "action.compare_branch"}}{{end}}</button>
|
<button id="new-pull-request" class="ui compact basic button tw-mr-0">{{if $.CanPull}}{{ctx.Locale.Tr "repo.pulls.compare_changes"}}{{else}}{{ctx.Locale.Tr "action.compare_branch"}}{{end}}</button>
|
||||||
</a>
|
</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
{{$branchLink := HTMLFormat `<a href="%s">%s</a>` .BranchLink .BranchDisplayName}}
|
{{$branchLink := HTMLFormat `<a href="%s">%s</a>` .BranchLink .BranchDisplayName}}
|
||||||
{{ctx.Locale.Tr "repo.pulls.recently_pushed_new_branches" $branchLink $timeSince}}
|
{{ctx.Locale.Tr "repo.pulls.recently_pushed_new_branches" $branchLink $timeSince}}
|
||||||
</div>
|
</div>
|
||||||
<a role="button" class="ui compact green button tw-m-0" href="{{.BranchCompareURL}}">
|
<a role="button" class="ui compact green button tw-m-0" href="{{QueryBuild .BranchCompareURL "expand" 1}}">
|
||||||
{{ctx.Locale.Tr "repo.pulls.compare_changes"}}
|
{{ctx.Locale.Tr "repo.pulls.compare_changes"}}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -205,10 +205,10 @@
|
|||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
{{else if $allowCreatePR}}
|
{{else if $allowCreatePR}}
|
||||||
<div class="ui info message pullrequest-form-toggle {{if .Flash}}tw-hidden{{end}}">
|
<div class="ui info message pullrequest-form-toggle {{if .ExpandNewPrForm}}tw-hidden{{end}}">
|
||||||
<button class="ui button primary show-panel toggle" data-panel=".pullrequest-form-toggle, .pullrequest-form">{{ctx.Locale.Tr "repo.pulls.new"}}</button>
|
<button class="ui button primary show-panel toggle" data-panel=".pullrequest-form-toggle, .pullrequest-form">{{ctx.Locale.Tr "repo.pulls.new"}}</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="pullrequest-form {{if not .Flash}}tw-hidden{{end}}">
|
<div class="pullrequest-form {{if not .ExpandNewPrForm}}tw-hidden{{end}}">
|
||||||
{{template "repo/issue/new_form" .}}
|
{{template "repo/issue/new_form" .}}
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
{{end}}
|
{{end}}
|
||||||
{{$cmpBranch = print $cmpBranch (.BranchName|PathEscapeSegments)}}
|
{{$cmpBranch = print $cmpBranch (.BranchName|PathEscapeSegments)}}
|
||||||
{{$compareLink := printf "%s/compare/%s...%s" .BaseRepo.Link (.BaseRepo.DefaultBranch|PathEscapeSegments) $cmpBranch}}
|
{{$compareLink := printf "%s/compare/%s...%s" .BaseRepo.Link (.BaseRepo.DefaultBranch|PathEscapeSegments) $cmpBranch}}
|
||||||
<a id="new-pull-request" role="button" class="ui compact basic button" href="{{$compareLink}}"
|
<a id="new-pull-request" role="button" class="ui compact basic button" href="{{QueryBuild $compareLink "expand" 1}}"
|
||||||
data-tooltip-content="{{if .PullRequestCtx.Allowed}}{{ctx.Locale.Tr "repo.pulls.compare_changes"}}{{else}}{{ctx.Locale.Tr "action.compare_branch"}}{{end}}">
|
data-tooltip-content="{{if .PullRequestCtx.Allowed}}{{ctx.Locale.Tr "repo.pulls.compare_changes"}}{{else}}{{ctx.Locale.Tr "action.compare_branch"}}{{end}}">
|
||||||
{{svg "octicon-git-pull-request"}}
|
{{svg "octicon-git-pull-request"}}
|
||||||
</a>
|
</a>
|
||||||
|
@ -24,23 +24,38 @@ import (
|
|||||||
func TestPullCompare(t *testing.T) {
|
func TestPullCompare(t *testing.T) {
|
||||||
defer tests.PrepareTestEnv(t)()
|
defer tests.PrepareTestEnv(t)()
|
||||||
|
|
||||||
session := loginUser(t, "user2")
|
t.Run("PullsNewRedirect", func(t *testing.T) {
|
||||||
req := NewRequest(t, "GET", "/user2/repo1/pulls")
|
req := NewRequest(t, "GET", "/user2/repo1/pulls/new/foo")
|
||||||
resp := session.MakeRequest(t, req, http.StatusOK)
|
resp := MakeRequest(t, req, http.StatusSeeOther)
|
||||||
htmlDoc := NewHTMLParser(t, resp.Body)
|
redirect := test.RedirectURL(resp)
|
||||||
link, exists := htmlDoc.doc.Find(".new-pr-button").Attr("href")
|
assert.Equal(t, "/user2/repo1/compare/master...foo?expand=1", redirect)
|
||||||
assert.True(t, exists, "The template has changed")
|
|
||||||
|
|
||||||
req = NewRequest(t, "GET", link)
|
req = NewRequest(t, "GET", "/user13/repo11/pulls/new/foo")
|
||||||
resp = session.MakeRequest(t, req, http.StatusOK)
|
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||||
assert.EqualValues(t, http.StatusOK, resp.Code)
|
redirect = test.RedirectURL(resp)
|
||||||
|
assert.Equal(t, "/user12/repo10/compare/master...user13:foo?expand=1", redirect)
|
||||||
|
})
|
||||||
|
|
||||||
// test the edit button in the PR diff view
|
t.Run("ButtonsExist", func(t *testing.T) {
|
||||||
req = NewRequest(t, "GET", "/user2/repo1/pulls/3/files")
|
session := loginUser(t, "user2")
|
||||||
resp = session.MakeRequest(t, req, http.StatusOK)
|
|
||||||
doc := NewHTMLParser(t, resp.Body)
|
// test the "New PR" button
|
||||||
editButtonCount := doc.doc.Find(".diff-file-header-actions a[href*='/_edit/']").Length()
|
req := NewRequest(t, "GET", "/user2/repo1/pulls")
|
||||||
assert.Positive(t, editButtonCount, "Expected to find a button to edit a file in the PR diff view but there were none")
|
resp := session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
htmlDoc := NewHTMLParser(t, resp.Body)
|
||||||
|
link, exists := htmlDoc.doc.Find(".new-pr-button").Attr("href")
|
||||||
|
assert.True(t, exists, "The template has changed")
|
||||||
|
req = NewRequest(t, "GET", link)
|
||||||
|
resp = session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
assert.EqualValues(t, http.StatusOK, resp.Code)
|
||||||
|
|
||||||
|
// test the edit button in the PR diff view
|
||||||
|
req = NewRequest(t, "GET", "/user2/repo1/pulls/3/files")
|
||||||
|
resp = session.MakeRequest(t, req, http.StatusOK)
|
||||||
|
doc := NewHTMLParser(t, resp.Body)
|
||||||
|
editButtonCount := doc.doc.Find(".diff-file-header-actions a[href*='/_edit/']").Length()
|
||||||
|
assert.Positive(t, editButtonCount, "Expected to find a button to edit a file in the PR diff view but there were none")
|
||||||
|
})
|
||||||
|
|
||||||
onGiteaRun(t, func(t *testing.T, u *url.URL) {
|
onGiteaRun(t, func(t *testing.T, u *url.URL) {
|
||||||
defer tests.PrepareTestEnv(t)()
|
defer tests.PrepareTestEnv(t)()
|
||||||
@ -54,8 +69,8 @@ func TestPullCompare(t *testing.T) {
|
|||||||
repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerName: "user2", Name: "repo1"})
|
repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerName: "user2", Name: "repo1"})
|
||||||
issueIndex := unittest.AssertExistsAndLoadBean(t, &issues_model.IssueIndex{GroupID: repo1.ID}, unittest.OrderBy("group_id ASC"))
|
issueIndex := unittest.AssertExistsAndLoadBean(t, &issues_model.IssueIndex{GroupID: repo1.ID}, unittest.OrderBy("group_id ASC"))
|
||||||
prFilesURL := fmt.Sprintf("/user2/repo1/pulls/%d/files", issueIndex.MaxIndex)
|
prFilesURL := fmt.Sprintf("/user2/repo1/pulls/%d/files", issueIndex.MaxIndex)
|
||||||
req = NewRequest(t, "GET", prFilesURL)
|
req := NewRequest(t, "GET", prFilesURL)
|
||||||
resp = session.MakeRequest(t, req, http.StatusOK)
|
resp := session.MakeRequest(t, req, http.StatusOK)
|
||||||
doc := NewHTMLParser(t, resp.Body)
|
doc := NewHTMLParser(t, resp.Body)
|
||||||
editButtonCount := doc.doc.Find(".diff-file-header-actions a[href*='/_edit/']").Length()
|
editButtonCount := doc.doc.Find(".diff-file-header-actions a[href*='/_edit/']").Length()
|
||||||
assert.Positive(t, editButtonCount, "Expected to find a button to edit a file in the PR diff view but there were none")
|
assert.Positive(t, editButtonCount, "Expected to find a button to edit a file in the PR diff view but there were none")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user