forked from mirror/gitea
d68a613ba8
Currently only SHA1 repositories are supported by Gitea. This adds support for alternate SHA256 with the additional aim of easier support for additional hash types in the future. Fixes: #13794 Limited by: https://github.com/go-git/go-git/issues/899 Depend on: #28138 <img width="776" alt="图片" src="https://github.com/go-gitea/gitea/assets/81045/5448c9a7-608e-4341-a149-5dd0069c9447"> --------- Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: 6543 <6543@obermui.de>
145 lines
4.1 KiB
Go
145 lines
4.1 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) {
|
|
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,
|
|
},
|
|
}
|
|
|
|
for _, c := range cases {
|
|
commit, err := repo.GetCommit(c.CommitID)
|
|
assert.NoError(t, err)
|
|
|
|
blameReader, err := CreateBlameReader(ctx, repo.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)
|
|
}
|
|
})
|
|
}
|