mirror of
https://github.com/go-gitea/gitea.git
synced 2026-04-04 05:45:23 +02:00
Merge 9d53e729ad980f428739ac4d6f8fceaab0c94e53 into 30c07c20e94551141cc1873ab14bdd4c104bba94
This commit is contained in:
commit
dae66e0b93
@ -476,7 +476,8 @@ func PrepareCompareDiff(
|
||||
|
||||
if (headCommitID == ci.MergeBase && !ci.DirectComparison()) ||
|
||||
headCommitID == ci.BaseCommitID {
|
||||
ctx.Data["IsNothingToCompare"] = true
|
||||
ctx.Data["CommitCount"] = 0
|
||||
ctx.Data["DiffNotAvailable"] = true
|
||||
if unit, err := repo.GetUnit(ctx, unit.TypePullRequests); err == nil {
|
||||
config := unit.PullRequestsConfig()
|
||||
|
||||
|
||||
@ -597,7 +597,7 @@ func prepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git_s
|
||||
}
|
||||
|
||||
if compareInfo.HeadCommitID == compareInfo.MergeBase {
|
||||
ctx.Data["IsNothingToCompare"] = true
|
||||
ctx.Data["DiffNotAvailable"] = true
|
||||
}
|
||||
|
||||
if pull.IsWorkInProgress(ctx) {
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="commits-table-left flex-text-block">
|
||||
{{if or .PageIsCommits (gt .CommitCount 0)}}
|
||||
{{.CommitCount}} {{ctx.Locale.Tr "repo.commits.commits"}}
|
||||
{{else if .IsNothingToCompare}}
|
||||
{{else if .DiffNotAvailable}}
|
||||
{{ctx.Locale.Tr "repo.commits.nothing_to_compare"}}
|
||||
{{else}}
|
||||
{{ctx.Locale.Tr "repo.commits.no_commits" $.BaseBranch $.HeadBranch}}
|
||||
|
||||
@ -173,10 +173,9 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{$showDiffBox := and .CommitCount (not .IsNothingToCompare)}}
|
||||
{{if and .IsSigned .PageIsComparePull}}
|
||||
{{$allowCreatePR := and ($.CompareInfo.BaseRef.IsBranch) ($.CompareInfo.HeadRef.IsBranch) (not $.CompareInfo.DirectComparison) (or $.AllowEmptyPr (not .IsNothingToCompare))}}
|
||||
{{if .IsNothingToCompare}}
|
||||
{{$allowCreatePR := and ($.CompareInfo.BaseRef.IsBranch) ($.CompareInfo.HeadRef.IsBranch) (not $.CompareInfo.DirectComparison) (or $.AllowEmptyPr (not .DiffNotAvailable))}}
|
||||
{{if .DiffNotAvailable}}
|
||||
<div class="ui segment">
|
||||
{{if $allowCreatePR}}
|
||||
{{ctx.Locale.Tr "repo.pulls.nothing_to_compare_and_allow_empty_pr"}}
|
||||
@ -216,16 +215,21 @@
|
||||
</div>
|
||||
{{end}}
|
||||
{{else}}{{/* not singed-in or not for pull-request */}}
|
||||
{{if not .CommitCount}}
|
||||
{{if .DiffNotAvailable}}
|
||||
<div class="ui segment">{{ctx.Locale.Tr "repo.commits.nothing_to_compare"}}</div>
|
||||
{{end}}
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
{{if $showDiffBox}}
|
||||
{{$hasCommits := and .Commits (gt .CommitCount 0)}}
|
||||
{{if or $hasCommits (not .DiffNotAvailable)}}
|
||||
<div class="ui container fluid padded tw-my-4">
|
||||
{{template "repo/commits_table" .}}
|
||||
{{template "repo/diff/box" .}}
|
||||
{{if $hasCommits}}
|
||||
{{template "repo/commits_table" .}}
|
||||
{{end}}
|
||||
{{if not .DiffNotAvailable}}
|
||||
{{template "repo/diff/box" .}}
|
||||
{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
@ -7,16 +7,22 @@ import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"path"
|
||||
"strconv"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
issues_model "code.gitea.io/gitea/models/issues"
|
||||
repo_model "code.gitea.io/gitea/models/repo"
|
||||
"code.gitea.io/gitea/models/unittest"
|
||||
user_model "code.gitea.io/gitea/models/user"
|
||||
"code.gitea.io/gitea/modules/git/gitcmd"
|
||||
"code.gitea.io/gitea/modules/test"
|
||||
repo_service "code.gitea.io/gitea/services/repository"
|
||||
"code.gitea.io/gitea/tests"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestPullCompare(t *testing.T) {
|
||||
@ -170,3 +176,68 @@ func TestPullCompare_EnableAllowEditsFromMaintainer(t *testing.T) {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestPullCompareForcePushDroppedCommit(t *testing.T) {
|
||||
onGiteaRun(t, func(t *testing.T, u *url.URL) {
|
||||
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
||||
repo, err := repo_service.CreateRepositoryDirectly(t.Context(), user, user, repo_service.CreateRepoOptions{
|
||||
Name: "compare-force-push",
|
||||
AutoInit: true,
|
||||
DefaultBranch: "master",
|
||||
Readme: "Default",
|
||||
}, true)
|
||||
require.NoError(t, err)
|
||||
|
||||
session := loginUser(t, user.Name)
|
||||
u.Path = fmt.Sprintf("/%s/%s.git", user.Name, repo.Name)
|
||||
u.User = url.UserPassword(user.Name, userPassword)
|
||||
|
||||
dstPath := t.TempDir()
|
||||
doGitClone(dstPath, u)(t)
|
||||
doGitCreateBranch(dstPath, "feature/drop-commit")(t)
|
||||
|
||||
doGitCheckoutWriteFileCommit(localGitAddCommitOptions{
|
||||
LocalRepoPath: dstPath,
|
||||
CheckoutBranch: "feature/drop-commit",
|
||||
TreeFilePath: "README.md",
|
||||
TreeFileContent: "first\n",
|
||||
})(t)
|
||||
doGitCheckoutWriteFileCommit(localGitAddCommitOptions{
|
||||
LocalRepoPath: dstPath,
|
||||
CheckoutBranch: "feature/drop-commit",
|
||||
TreeFilePath: "README.md",
|
||||
TreeFileContent: "first\nsecond\n",
|
||||
})(t)
|
||||
doGitPushTestRepository(dstPath, "origin", "feature/drop-commit")(t)
|
||||
|
||||
resp := testPullCreate(t, session, user.Name, repo.Name, true, "master", "feature/drop-commit", "Force push compare")
|
||||
prURL := test.RedirectURL(resp)
|
||||
issueIndex, err := strconv.ParseInt(path.Base(prURL), 10, 64)
|
||||
require.NoError(t, err)
|
||||
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{RepoID: repo.ID, Index: issueIndex})
|
||||
require.NoError(t, issue.LoadPullRequest(t.Context()))
|
||||
|
||||
err = gitcmd.NewCommand("reset", "--hard", "HEAD~1").WithDir(dstPath).Run(t.Context())
|
||||
require.NoError(t, err)
|
||||
err = gitcmd.NewCommand("push", "--force", "origin", "feature/drop-commit").WithDir(dstPath).Run(t.Context())
|
||||
require.NoError(t, err)
|
||||
|
||||
var compareURL string
|
||||
require.Eventually(t, func() bool {
|
||||
req := NewRequest(t, "GET", prURL)
|
||||
resp := session.MakeRequest(t, req, http.StatusOK)
|
||||
htmlDoc := NewHTMLParser(t, resp.Body)
|
||||
selection := htmlDoc.doc.Find("a.comment-text-label[href*='/compare/']")
|
||||
if selection.Length() == 0 {
|
||||
return false
|
||||
}
|
||||
compareURL = selection.Last().AttrOr("href", "")
|
||||
return compareURL != ""
|
||||
}, 5*time.Second, 20*time.Millisecond)
|
||||
|
||||
req := NewRequest(t, "GET", compareURL)
|
||||
resp = session.MakeRequest(t, req, http.StatusOK)
|
||||
htmlDoc := NewHTMLParser(t, resp.Body)
|
||||
assert.Positive(t, htmlDoc.doc.Find("#diff-file-boxes [data-new-filename=\"README.md\"]").Length())
|
||||
})
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user