123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- // 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)
- }
- })
- }
|