diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go index a2bfa43c09..e8c24eaa07 100644 --- a/modules/git/repo_commit.go +++ b/modules/git/repo_commit.go @@ -230,7 +230,7 @@ func (repo *Repository) CommitsByFileAndRange(opts CommitsByFileAndRangeOptions) go func() { stderr := strings.Builder{} gitCmd := NewCommand(repo.Ctx, "rev-list"). - AddOptionFormat("--max-count=%d", setting.Git.CommitsRangeSize*opts.Page). + AddOptionFormat("--max-count=%d", setting.Git.CommitsRangeSize). AddOptionFormat("--skip=%d", skip) gitCmd.AddDynamicArguments(opts.Revision) diff --git a/modules/git/repo_commit_test.go b/modules/git/repo_commit_test.go index 6a8874fd74..f9f7d0edc7 100644 --- a/modules/git/repo_commit_test.go +++ b/modules/git/repo_commit_test.go @@ -7,6 +7,9 @@ import ( "path/filepath" "testing" + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/test" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -138,3 +141,61 @@ func TestGetTagCommit(t *testing.T) { require.NoError(t, err) assert.EqualValues(t, lTagCommitID, lTag.ID.String()) } + +func TestCommitsByRange(t *testing.T) { + bareRepo1Path := filepath.Join(testReposDir, "repo1_bare") + bareRepo1, err := openRepositoryWithDefaultContext(bareRepo1Path) + require.NoError(t, err) + defer bareRepo1.Close() + + baseCommit, err := bareRepo1.GetBranchCommit("master") + require.NoError(t, err) + + testCases := []struct { + Page int + ExpectedCommitCount int + }{ + {1, 3}, + {2, 3}, + {3, 1}, + {4, 0}, + } + for _, testCase := range testCases { + commits, err := baseCommit.CommitsByRange(testCase.Page, 3, "") + require.NoError(t, err) + assert.Len(t, commits, testCase.ExpectedCommitCount, "page: %d", testCase.Page) + } +} + +func TestCommitsByFileAndRange(t *testing.T) { + bareRepo1Path := filepath.Join(testReposDir, "repo1_bare") + bareRepo1, err := openRepositoryWithDefaultContext(bareRepo1Path) + require.NoError(t, err) + defer bareRepo1.Close() + defer test.MockVariableValue(&setting.Git.CommitsRangeSize, 2)() + + testCases := []struct { + File string + Page int + ExpectedCommitCount int + }{ + {"file1.txt", 1, 1}, + {"file2.txt", 1, 1}, + {"file*.txt", 1, 2}, + {"foo", 1, 2}, + {"foo", 2, 1}, + {"foo", 3, 0}, + {"f*", 1, 2}, + {"f*", 2, 2}, + {"f*", 3, 1}, + } + for _, testCase := range testCases { + commits, err := bareRepo1.CommitsByFileAndRange(CommitsByFileAndRangeOptions{ + Revision: "master", + File: testCase.File, + Page: testCase.Page, + }) + require.NoError(t, err) + assert.Len(t, commits, testCase.ExpectedCommitCount, "file: '%s', page: %d", testCase.File, testCase.Page) + } +}