diff --git a/modules/gitrepo/commit.go b/modules/gitrepo/commit.go index 38785dcb97..24df90c015 100644 --- a/modules/gitrepo/commit.go +++ b/modules/gitrepo/commit.go @@ -32,6 +32,14 @@ func CommitsCount(ctx context.Context, repo Repository, opts CommitsCountOptions cmd.AddOptionValues("--not", opts.Not) } + if opts.Since != "" { + cmd.AddOptionFormat("--since=%s", opts.Since) + } + + if opts.Until != "" { + cmd.AddOptionFormat("--until=%s", opts.Until) + } + if len(opts.RelPath) > 0 { cmd.AddDashesAndList(opts.RelPath...) } diff --git a/modules/gitrepo/commit_test.go b/modules/gitrepo/commit_test.go index 05cedc39ef..638795a985 100644 --- a/modules/gitrepo/commit_test.go +++ b/modules/gitrepo/commit_test.go @@ -34,6 +34,37 @@ func TestCommitsCountWithoutBase(t *testing.T) { assert.Equal(t, int64(2), commitsCount) } +func TestCommitsCountWithSinceUntil(t *testing.T) { + bareRepo1 := &mockRepository{path: "repo1_bare"} + revision := []string{"8006ff9adbf0cb94da7dad9e537e53817f9fa5c0"} + + // The three commits on this revision are dated 2018-04-18, 2017-12-19 and 2017-12-19. + cases := []struct { + name string + since string + until string + expected int64 + }{ + {name: "no filter", expected: 3}, + {name: "since keeps newer commits", since: "2018-01-01", expected: 1}, + {name: "until keeps older commits", until: "2018-01-01", expected: 2}, + {name: "since and until bound the range", since: "2017-12-19T22:16:00-08:00", until: "2018-01-01", expected: 1}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + commitsCount, err := CommitsCount(t.Context(), bareRepo1, + CommitsCountOptions{ + Revision: revision, + Since: tc.since, + Until: tc.until, + }) + + assert.NoError(t, err) + assert.Equal(t, tc.expected, commitsCount) + }) + } +} + func TestGetLatestCommitTime(t *testing.T) { bareRepo1 := &mockRepository{path: "repo1_bare"} lct, err := GetLatestCommitTime(t.Context(), bareRepo1)