You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

blame_test.go 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package git
  4. import (
  5. "context"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func TestReadingBlameOutput(t *testing.T) {
  10. ctx, cancel := context.WithCancel(context.Background())
  11. defer cancel()
  12. t.Run("Without .git-blame-ignore-revs", func(t *testing.T) {
  13. repo, err := OpenRepository(ctx, "./tests/repos/repo5_pulls")
  14. assert.NoError(t, err)
  15. defer repo.Close()
  16. commit, err := repo.GetCommit("f32b0a9dfd09a60f616f29158f772cedd89942d2")
  17. assert.NoError(t, err)
  18. parts := []*BlamePart{
  19. {
  20. Sha: "72866af952e98d02a73003501836074b286a78f6",
  21. Lines: []string{
  22. "# test_repo",
  23. "Test repository for testing migration from github to gitea",
  24. },
  25. },
  26. {
  27. Sha: "f32b0a9dfd09a60f616f29158f772cedd89942d2",
  28. Lines: []string{"", "Do not make any changes to this repo it is used for unit testing"},
  29. PreviousSha: "72866af952e98d02a73003501836074b286a78f6",
  30. PreviousPath: "README.md",
  31. },
  32. }
  33. for _, bypass := range []bool{false, true} {
  34. blameReader, err := CreateBlameReader(ctx, Sha1ObjectFormat, "./tests/repos/repo5_pulls", commit, "README.md", bypass)
  35. assert.NoError(t, err)
  36. assert.NotNil(t, blameReader)
  37. defer blameReader.Close()
  38. assert.False(t, blameReader.UsesIgnoreRevs())
  39. for _, part := range parts {
  40. actualPart, err := blameReader.NextPart()
  41. assert.NoError(t, err)
  42. assert.Equal(t, part, actualPart)
  43. }
  44. // make sure all parts have been read
  45. actualPart, err := blameReader.NextPart()
  46. assert.Nil(t, actualPart)
  47. assert.NoError(t, err)
  48. }
  49. })
  50. t.Run("With .git-blame-ignore-revs", func(t *testing.T) {
  51. repo, err := OpenRepository(ctx, "./tests/repos/repo6_blame")
  52. assert.NoError(t, err)
  53. defer repo.Close()
  54. full := []*BlamePart{
  55. {
  56. Sha: "af7486bd54cfc39eea97207ca666aa69c9d6df93",
  57. Lines: []string{"line", "line"},
  58. },
  59. {
  60. Sha: "45fb6cbc12f970b04eacd5cd4165edd11c8d7376",
  61. Lines: []string{"changed line"},
  62. PreviousSha: "af7486bd54cfc39eea97207ca666aa69c9d6df93",
  63. PreviousPath: "blame.txt",
  64. },
  65. {
  66. Sha: "af7486bd54cfc39eea97207ca666aa69c9d6df93",
  67. Lines: []string{"line", "line", ""},
  68. },
  69. }
  70. cases := []struct {
  71. CommitID string
  72. UsesIgnoreRevs bool
  73. Bypass bool
  74. Parts []*BlamePart
  75. }{
  76. {
  77. CommitID: "544d8f7a3b15927cddf2299b4b562d6ebd71b6a7",
  78. UsesIgnoreRevs: true,
  79. Bypass: false,
  80. Parts: []*BlamePart{
  81. {
  82. Sha: "af7486bd54cfc39eea97207ca666aa69c9d6df93",
  83. Lines: []string{"line", "line", "changed line", "line", "line", ""},
  84. },
  85. },
  86. },
  87. {
  88. CommitID: "544d8f7a3b15927cddf2299b4b562d6ebd71b6a7",
  89. UsesIgnoreRevs: false,
  90. Bypass: true,
  91. Parts: full,
  92. },
  93. {
  94. CommitID: "45fb6cbc12f970b04eacd5cd4165edd11c8d7376",
  95. UsesIgnoreRevs: false,
  96. Bypass: false,
  97. Parts: full,
  98. },
  99. {
  100. CommitID: "45fb6cbc12f970b04eacd5cd4165edd11c8d7376",
  101. UsesIgnoreRevs: false,
  102. Bypass: false,
  103. Parts: full,
  104. },
  105. }
  106. for _, c := range cases {
  107. commit, err := repo.GetCommit(c.CommitID)
  108. assert.NoError(t, err)
  109. blameReader, err := CreateBlameReader(ctx, repo.objectFormat, "./tests/repos/repo6_blame", commit, "blame.txt", c.Bypass)
  110. assert.NoError(t, err)
  111. assert.NotNil(t, blameReader)
  112. defer blameReader.Close()
  113. assert.Equal(t, c.UsesIgnoreRevs, blameReader.UsesIgnoreRevs())
  114. for _, part := range c.Parts {
  115. actualPart, err := blameReader.NextPart()
  116. assert.NoError(t, err)
  117. assert.Equal(t, part, actualPart)
  118. }
  119. // make sure all parts have been read
  120. actualPart, err := blameReader.NextPart()
  121. assert.Nil(t, actualPart)
  122. assert.NoError(t, err)
  123. }
  124. })
  125. }