gitea源码

commit_sha256_test.go 6.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. //go:build !gogit
  4. package git
  5. import (
  6. "path/filepath"
  7. "strings"
  8. "testing"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/stretchr/testify/require"
  11. )
  12. func TestCommitsCountSha256(t *testing.T) {
  13. bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256")
  14. commitsCount, err := CommitsCount(t.Context(),
  15. CommitsCountOptions{
  16. RepoPath: bareRepo1Path,
  17. Revision: []string{"f004f41359117d319dedd0eaab8c5259ee2263da839dcba33637997458627fdc"},
  18. })
  19. assert.NoError(t, err)
  20. assert.Equal(t, int64(3), commitsCount)
  21. }
  22. func TestCommitsCountWithoutBaseSha256(t *testing.T) {
  23. bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256")
  24. commitsCount, err := CommitsCount(t.Context(),
  25. CommitsCountOptions{
  26. RepoPath: bareRepo1Path,
  27. Not: "main",
  28. Revision: []string{"branch1"},
  29. })
  30. assert.NoError(t, err)
  31. assert.Equal(t, int64(2), commitsCount)
  32. }
  33. func TestGetFullCommitIDSha256(t *testing.T) {
  34. bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256")
  35. id, err := GetFullCommitID(t.Context(), bareRepo1Path, "f004f4")
  36. assert.NoError(t, err)
  37. assert.Equal(t, "f004f41359117d319dedd0eaab8c5259ee2263da839dcba33637997458627fdc", id)
  38. }
  39. func TestGetFullCommitIDErrorSha256(t *testing.T) {
  40. bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256")
  41. id, err := GetFullCommitID(t.Context(), bareRepo1Path, "unknown")
  42. assert.Empty(t, id)
  43. if assert.Error(t, err) {
  44. assert.EqualError(t, err, "object does not exist [id: unknown, rel_path: ]")
  45. }
  46. }
  47. func TestCommitFromReaderSha256(t *testing.T) {
  48. commitString := `tree e7f9e96dd79c09b078cac8b303a7d3b9d65ff9b734e86060a4d20409fd379f9e
  49. parent 26e9ccc29fad747e9c5d9f4c9ddeb7eff61cc45ef6a8dc258cbeb181afc055e8
  50. author Adam Majer <amajer@suse.de> 1698676906 +0100
  51. committer Adam Majer <amajer@suse.de> 1698676906 +0100
  52. gpgsig-sha256 -----BEGIN PGP SIGNATURE-----
  53. ` + " " + `
  54. iQIrBAABCgAtFiEES+fB08xlgTrzSdQvhkUIsBsmec8FAmU/wKoPHGFtYWplckBz
  55. dXNlLmRlAAoJEIZFCLAbJnnP4s4PQIJATa++WPzR6/H4etT7bsOGoMyguEJYyWOd
  56. aTybplzT7QAL7h2to0QszGabtzMJPIA39xSFZNYNN30voK5YyyYibXluPKgjemfK
  57. WNXwF+gkwgZI38gSvKf+vlqI+EYyIFe19wOhiju0m8SIlB5NEPiWHa17q2mqmqqx
  58. 1FWa2JdqLPYjAtSLFXeSZegrY5V1FxdemyMUONkg8YO9OSIMZiE0GsnnOXQ3xcT4
  59. JTCnmlUxIKw689UiEY80JopUIq+Wl7+qq9507IYYSUCyB6JazL42AKMzVCbD+qBP
  60. oOzh/hafYgk9H9qCQXaLbmvs17zXRpicig1bAzqgAy1FDelvpERyRTydEajSLIG6
  61. U1cRCkgXCZ0NfsYNPPmBa8b3+rnstypXYTbyMwTln7FfUAaGo6o9JYiPMkzxlmsy
  62. zfp/tcaY8+LlBL9aOJjtv+a0p+HrpCGd6CCa4ARfphTLq8QRSSh8uzlB9N+6HnRI
  63. VAEUo6ecdDxSpyt2naeg9pKus/BRi7P6g4B1hkk/zZstUX/QP4IQuAJbXjkvsC+X
  64. HKRr3NlRM/DygzTyj0gN74uoa0goCIbyAQhiT42nm0cuhM7uN/W0ayrlZjGF1cbR
  65. 8NCJUL2Nwj0ywKIavC99Ipkb8AsFwpVT6U6effs6
  66. =xybZ
  67. -----END PGP SIGNATURE-----
  68. signed commit`
  69. sha := &Sha256Hash{
  70. 0x94, 0x33, 0xb2, 0xa6, 0x2b, 0x96, 0x4c, 0x17, 0xa4, 0x48, 0x5a, 0xe1, 0x80, 0xf4, 0x5f, 0x59,
  71. 0x5d, 0x3e, 0x69, 0xd3, 0x1b, 0x78, 0x60, 0x87, 0x77, 0x5e, 0x28, 0xc6, 0xb6, 0x39, 0x9d, 0xf0,
  72. }
  73. gitRepo, err := OpenRepository(t.Context(), filepath.Join(testReposDir, "repo1_bare_sha256"))
  74. assert.NoError(t, err)
  75. assert.NotNil(t, gitRepo)
  76. defer gitRepo.Close()
  77. commitFromReader, err := CommitFromReader(gitRepo, sha, strings.NewReader(commitString))
  78. assert.NoError(t, err)
  79. require.NotNil(t, commitFromReader)
  80. assert.EqualValues(t, sha, commitFromReader.ID)
  81. assert.Equal(t, `-----BEGIN PGP SIGNATURE-----
  82. iQIrBAABCgAtFiEES+fB08xlgTrzSdQvhkUIsBsmec8FAmU/wKoPHGFtYWplckBz
  83. dXNlLmRlAAoJEIZFCLAbJnnP4s4PQIJATa++WPzR6/H4etT7bsOGoMyguEJYyWOd
  84. aTybplzT7QAL7h2to0QszGabtzMJPIA39xSFZNYNN30voK5YyyYibXluPKgjemfK
  85. WNXwF+gkwgZI38gSvKf+vlqI+EYyIFe19wOhiju0m8SIlB5NEPiWHa17q2mqmqqx
  86. 1FWa2JdqLPYjAtSLFXeSZegrY5V1FxdemyMUONkg8YO9OSIMZiE0GsnnOXQ3xcT4
  87. JTCnmlUxIKw689UiEY80JopUIq+Wl7+qq9507IYYSUCyB6JazL42AKMzVCbD+qBP
  88. oOzh/hafYgk9H9qCQXaLbmvs17zXRpicig1bAzqgAy1FDelvpERyRTydEajSLIG6
  89. U1cRCkgXCZ0NfsYNPPmBa8b3+rnstypXYTbyMwTln7FfUAaGo6o9JYiPMkzxlmsy
  90. zfp/tcaY8+LlBL9aOJjtv+a0p+HrpCGd6CCa4ARfphTLq8QRSSh8uzlB9N+6HnRI
  91. VAEUo6ecdDxSpyt2naeg9pKus/BRi7P6g4B1hkk/zZstUX/QP4IQuAJbXjkvsC+X
  92. HKRr3NlRM/DygzTyj0gN74uoa0goCIbyAQhiT42nm0cuhM7uN/W0ayrlZjGF1cbR
  93. 8NCJUL2Nwj0ywKIavC99Ipkb8AsFwpVT6U6effs6
  94. =xybZ
  95. -----END PGP SIGNATURE-----`, commitFromReader.Signature.Signature)
  96. assert.Equal(t, `tree e7f9e96dd79c09b078cac8b303a7d3b9d65ff9b734e86060a4d20409fd379f9e
  97. parent 26e9ccc29fad747e9c5d9f4c9ddeb7eff61cc45ef6a8dc258cbeb181afc055e8
  98. author Adam Majer <amajer@suse.de> 1698676906 +0100
  99. committer Adam Majer <amajer@suse.de> 1698676906 +0100
  100. signed commit`, commitFromReader.Signature.Payload)
  101. assert.Equal(t, "Adam Majer <amajer@suse.de>", commitFromReader.Author.String())
  102. commitFromReader2, err := CommitFromReader(gitRepo, sha, strings.NewReader(commitString+"\n\n"))
  103. assert.NoError(t, err)
  104. commitFromReader.CommitMessage += "\n\n"
  105. commitFromReader.Signature.Payload += "\n\n"
  106. assert.Equal(t, commitFromReader, commitFromReader2)
  107. }
  108. func TestHasPreviousCommitSha256(t *testing.T) {
  109. bareRepo1Path := filepath.Join(testReposDir, "repo1_bare_sha256")
  110. repo, err := OpenRepository(t.Context(), bareRepo1Path)
  111. assert.NoError(t, err)
  112. defer repo.Close()
  113. commit, err := repo.GetCommit("f004f41359117d319dedd0eaab8c5259ee2263da839dcba33637997458627fdc")
  114. assert.NoError(t, err)
  115. objectFormat, err := repo.GetObjectFormat()
  116. assert.NoError(t, err)
  117. parentSHA := MustIDFromString("b0ec7af4547047f12d5093e37ef8f1b3b5415ed8ee17894d43a34d7d34212e9c")
  118. notParentSHA := MustIDFromString("42e334efd04cd36eea6da0599913333c26116e1a537ca76e5b6e4af4dda00236")
  119. assert.Equal(t, objectFormat, parentSHA.Type())
  120. assert.Equal(t, "sha256", objectFormat.Name())
  121. haz, err := commit.HasPreviousCommit(parentSHA)
  122. assert.NoError(t, err)
  123. assert.True(t, haz)
  124. hazNot, err := commit.HasPreviousCommit(notParentSHA)
  125. assert.NoError(t, err)
  126. assert.False(t, hazNot)
  127. selfNot, err := commit.HasPreviousCommit(commit.ID)
  128. assert.NoError(t, err)
  129. assert.False(t, selfNot)
  130. }
  131. func TestGetCommitFileStatusMergesSha256(t *testing.T) {
  132. bareRepo1Path := filepath.Join(testReposDir, "repo6_merge_sha256")
  133. commitFileStatus, err := GetCommitFileStatus(t.Context(), bareRepo1Path, "d2e5609f630dd8db500f5298d05d16def282412e3e66ed68cc7d0833b29129a1")
  134. assert.NoError(t, err)
  135. expected := CommitFileStatus{
  136. []string{
  137. "add_file.txt",
  138. },
  139. []string{},
  140. []string{
  141. "to_modify.txt",
  142. },
  143. }
  144. assert.Equal(t, expected.Added, commitFileStatus.Added)
  145. assert.Equal(t, expected.Removed, commitFileStatus.Removed)
  146. assert.Equal(t, expected.Modified, commitFileStatus.Modified)
  147. expected = CommitFileStatus{
  148. []string{},
  149. []string{
  150. "to_remove.txt",
  151. },
  152. []string{},
  153. }
  154. commitFileStatus, err = GetCommitFileStatus(t.Context(), bareRepo1Path, "da1ded40dc8e5b7c564171f4bf2fc8370487decfb1cb6a99ef28f3ed73d09172")
  155. assert.NoError(t, err)
  156. assert.Equal(t, expected.Added, commitFileStatus.Added)
  157. assert.Equal(t, expected.Removed, commitFileStatus.Removed)
  158. assert.Equal(t, expected.Modified, commitFileStatus.Modified)
  159. }