mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-27 23:25:22 +00:00
c9d9255244
Most time, when invoking `git.OpenRepository`, `objectFormat` will not be used, so it's a waste to invoke commandline to get the object format. This PR make it a lazy operation, only invoke that when necessary. (cherry picked from commit e84e5db6de0306d514b1f1a9657931fb7197a188)
148 lines
4.2 KiB
Go
148 lines
4.2 KiB
Go
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package git
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestReadingBlameOutputSha256(t *testing.T) {
|
|
skipIfSHA256NotSupported(t)
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
t.Run("Without .git-blame-ignore-revs", func(t *testing.T) {
|
|
repo, err := OpenRepository(ctx, "./tests/repos/repo5_pulls_sha256")
|
|
assert.NoError(t, err)
|
|
defer repo.Close()
|
|
|
|
commit, err := repo.GetCommit("0b69b7bb649b5d46e14cabb6468685e5dd721290acc7ffe604d37cde57927345")
|
|
assert.NoError(t, err)
|
|
|
|
parts := []*BlamePart{
|
|
{
|
|
Sha: "1e35a51dc00fd7de730344c07061acfe80e8117e075ac979b6a29a3a045190ca",
|
|
Lines: []string{
|
|
"# test_repo",
|
|
"Test repository for testing migration from github to gitea",
|
|
},
|
|
},
|
|
{
|
|
Sha: "0b69b7bb649b5d46e14cabb6468685e5dd721290acc7ffe604d37cde57927345",
|
|
Lines: []string{"", "Do not make any changes to this repo it is used for unit testing"},
|
|
PreviousSha: "1e35a51dc00fd7de730344c07061acfe80e8117e075ac979b6a29a3a045190ca",
|
|
PreviousPath: "README.md",
|
|
},
|
|
}
|
|
|
|
for _, bypass := range []bool{false, true} {
|
|
blameReader, err := CreateBlameReader(ctx, Sha256ObjectFormat, "./tests/repos/repo5_pulls_sha256", commit, "README.md", bypass)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, blameReader)
|
|
defer blameReader.Close()
|
|
|
|
assert.False(t, blameReader.UsesIgnoreRevs())
|
|
|
|
for _, part := range parts {
|
|
actualPart, err := blameReader.NextPart()
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, part, actualPart)
|
|
}
|
|
|
|
// make sure all parts have been read
|
|
actualPart, err := blameReader.NextPart()
|
|
assert.Nil(t, actualPart)
|
|
assert.NoError(t, err)
|
|
}
|
|
})
|
|
|
|
t.Run("With .git-blame-ignore-revs", func(t *testing.T) {
|
|
repo, err := OpenRepository(ctx, "./tests/repos/repo6_blame_sha256")
|
|
assert.NoError(t, err)
|
|
defer repo.Close()
|
|
|
|
full := []*BlamePart{
|
|
{
|
|
Sha: "ab2b57a4fa476fb2edb74dafa577caf918561abbaa8fba0c8dc63c412e17a7cc",
|
|
Lines: []string{"line", "line"},
|
|
},
|
|
{
|
|
Sha: "9347b0198cd1f25017579b79d0938fa89dba34ad2514f0dd92f6bc975ed1a2fe",
|
|
Lines: []string{"changed line"},
|
|
PreviousSha: "ab2b57a4fa476fb2edb74dafa577caf918561abbaa8fba0c8dc63c412e17a7cc",
|
|
PreviousPath: "blame.txt",
|
|
},
|
|
{
|
|
Sha: "ab2b57a4fa476fb2edb74dafa577caf918561abbaa8fba0c8dc63c412e17a7cc",
|
|
Lines: []string{"line", "line", ""},
|
|
},
|
|
}
|
|
|
|
cases := []struct {
|
|
CommitID string
|
|
UsesIgnoreRevs bool
|
|
Bypass bool
|
|
Parts []*BlamePart
|
|
}{
|
|
{
|
|
CommitID: "e2f5660e15159082902960af0ed74fc144921d2b0c80e069361853b3ece29ba3",
|
|
UsesIgnoreRevs: true,
|
|
Bypass: false,
|
|
Parts: []*BlamePart{
|
|
{
|
|
Sha: "ab2b57a4fa476fb2edb74dafa577caf918561abbaa8fba0c8dc63c412e17a7cc",
|
|
Lines: []string{"line", "line", "changed line", "line", "line", ""},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
CommitID: "e2f5660e15159082902960af0ed74fc144921d2b0c80e069361853b3ece29ba3",
|
|
UsesIgnoreRevs: false,
|
|
Bypass: true,
|
|
Parts: full,
|
|
},
|
|
{
|
|
CommitID: "9347b0198cd1f25017579b79d0938fa89dba34ad2514f0dd92f6bc975ed1a2fe",
|
|
UsesIgnoreRevs: false,
|
|
Bypass: false,
|
|
Parts: full,
|
|
},
|
|
{
|
|
CommitID: "9347b0198cd1f25017579b79d0938fa89dba34ad2514f0dd92f6bc975ed1a2fe",
|
|
UsesIgnoreRevs: false,
|
|
Bypass: false,
|
|
Parts: full,
|
|
},
|
|
}
|
|
|
|
objectFormat, err := repo.GetObjectFormat()
|
|
assert.NoError(t, err)
|
|
for _, c := range cases {
|
|
commit, err := repo.GetCommit(c.CommitID)
|
|
assert.NoError(t, err)
|
|
blameReader, err := CreateBlameReader(ctx, objectFormat, "./tests/repos/repo6_blame_sha256", commit, "blame.txt", c.Bypass)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, blameReader)
|
|
defer blameReader.Close()
|
|
|
|
assert.Equal(t, c.UsesIgnoreRevs, blameReader.UsesIgnoreRevs())
|
|
|
|
for _, part := range c.Parts {
|
|
actualPart, err := blameReader.NextPart()
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, part, actualPart)
|
|
}
|
|
|
|
// make sure all parts have been read
|
|
actualPart, err := blameReader.NextPart()
|
|
assert.Nil(t, actualPart)
|
|
assert.NoError(t, err)
|
|
}
|
|
})
|
|
}
|