mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-02 20:48:32 +00:00
075ff8f516
Speeds up two slow git paths. Results match `main` apart from the `log.follow` fix. - Activity top authors skip `--numstat` and an unused `rev-list --count`, they only need names and emails - Subdirectory listings pass only the directory as pathspec, which already matches all its entries - Directory listings pass `--no-follow` to `git log`, a configured `log.follow` disabled parent rewriting and gave wrong last commits | Benchmark | main | PR | Change | |---|--:|--:|--:| | Top authors, gitea, 1 month | 632 ms | 21 ms | -97% | | Top authors, gitea, 1 year | 3216 ms | 68 ms | -98% | | Top authors, tea | 62 ms | 12 ms | -80% | | Listing, git `Documentation/technical` | 189 ms | 91 ms | -52% | | Listing, gitea `options/license` | 329 ms | 208 ms | -37% | | Listing, gitea `templates/repo` | 294 ms | 223 ms | -24% | Tested with unit and sqlite integration tests in default and `gogit` builds on git 2.25 and 2.56, and by comparing listing results and cache writes with `main` on randomized histories and the gitea, tea and git repos. Benchmarks are medians of 8 interleaved macOS runs.
41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package git
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestRepository_GetCodeActivityStats(t *testing.T) {
|
|
bareRepo1Path := filepath.Join(testReposDir, "repo1_bare")
|
|
bareRepo1, err := OpenRepositoryLocal(t.Context(), bareRepo1Path)
|
|
assert.NoError(t, err)
|
|
defer bareRepo1.Close()
|
|
|
|
timeFrom, err := time.Parse(time.RFC3339, "2016-01-01T00:00:00+00:00")
|
|
assert.NoError(t, err)
|
|
|
|
code, err := bareRepo1.GetCodeActivityStats(t.Context(), timeFrom, "")
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, code)
|
|
|
|
assert.EqualValues(t, 10, code.CommitCount)
|
|
assert.EqualValues(t, 3, code.AuthorCount)
|
|
assert.EqualValues(t, 10, code.CommitCountInAllBranches)
|
|
assert.EqualValues(t, 10, code.Additions)
|
|
assert.EqualValues(t, 1, code.Deletions)
|
|
assert.Len(t, code.Authors, 3)
|
|
assert.Equal(t, "tris.git@shoddynet.org", code.Authors[1].Email)
|
|
assert.EqualValues(t, 3, code.Authors[1].Commits)
|
|
assert.EqualValues(t, 5, code.Authors[0].Commits)
|
|
|
|
authors, err := GetCodeActivityAuthors(t.Context(), bareRepo1, timeFrom)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, code.Authors, authors)
|
|
}
|