0
0
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:
Lunny Xiao 2026-04-03 06:15:39 +00:00 committed by GitHub
commit dae66e0b93
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 86 additions and 10 deletions

View File

@ -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()

View File

@ -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) {

View File

@ -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}}

View File

@ -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>

View File

@ -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())
})
}