gitea源码

submodule_test.go 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package gitdiff
  4. import (
  5. "strings"
  6. "testing"
  7. "code.gitea.io/gitea/modules/git"
  8. "code.gitea.io/gitea/modules/setting"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestParseSubmoduleInfo(t *testing.T) {
  12. type testcase struct {
  13. name string
  14. gitdiff string
  15. infos map[int]SubmoduleDiffInfo
  16. }
  17. tests := []testcase{
  18. {
  19. name: "added",
  20. gitdiff: `diff --git a/.gitmodules b/.gitmodules
  21. new file mode 100644
  22. index 0000000..4ac13c1
  23. --- /dev/null
  24. +++ b/.gitmodules
  25. @@ -0,0 +1,3 @@
  26. +[submodule "gitea-mirror"]
  27. + path = gitea-mirror
  28. + url = https://gitea.com/gitea/gitea-mirror
  29. diff --git a/gitea-mirror b/gitea-mirror
  30. new file mode 160000
  31. index 0000000..68972a9
  32. --- /dev/null
  33. +++ b/gitea-mirror
  34. @@ -0,0 +1 @@
  35. +Subproject commit 68972a994719ae5c74e28d8fa82fa27c23399bc8
  36. `,
  37. infos: map[int]SubmoduleDiffInfo{
  38. 1: {NewRefID: "68972a994719ae5c74e28d8fa82fa27c23399bc8"},
  39. },
  40. },
  41. {
  42. name: "updated",
  43. gitdiff: `diff --git a/gitea-mirror b/gitea-mirror
  44. index 68972a9..c8ffe77 160000
  45. --- a/gitea-mirror
  46. +++ b/gitea-mirror
  47. @@ -1 +1 @@
  48. -Subproject commit 68972a994719ae5c74e28d8fa82fa27c23399bc8
  49. +Subproject commit c8ffe777cf9c5bb47a38e3e0b3a3b5de6cd8813d
  50. `,
  51. infos: map[int]SubmoduleDiffInfo{
  52. 0: {
  53. PreviousRefID: "68972a994719ae5c74e28d8fa82fa27c23399bc8",
  54. NewRefID: "c8ffe777cf9c5bb47a38e3e0b3a3b5de6cd8813d",
  55. },
  56. },
  57. },
  58. {
  59. name: "rename",
  60. gitdiff: `diff --git a/.gitmodules b/.gitmodules
  61. index 4ac13c1..0510edd 100644
  62. --- a/.gitmodules
  63. +++ b/.gitmodules
  64. @@ -1,3 +1,3 @@
  65. [submodule "gitea-mirror"]
  66. - path = gitea-mirror
  67. + path = gitea
  68. url = https://gitea.com/gitea/gitea-mirror
  69. diff --git a/gitea-mirror b/gitea
  70. similarity index 100%
  71. rename from gitea-mirror
  72. rename to gitea
  73. `,
  74. },
  75. {
  76. name: "deleted",
  77. gitdiff: `diff --git a/.gitmodules b/.gitmodules
  78. index 0510edd..e69de29 100644
  79. --- a/.gitmodules
  80. +++ b/.gitmodules
  81. @@ -1,3 +0,0 @@
  82. -[submodule "gitea-mirror"]
  83. - path = gitea
  84. - url = https://gitea.com/gitea/gitea-mirror
  85. diff --git a/gitea b/gitea
  86. deleted file mode 160000
  87. index c8ffe77..0000000
  88. --- a/gitea
  89. +++ /dev/null
  90. @@ -1 +0,0 @@
  91. -Subproject commit c8ffe777cf9c5bb47a38e3e0b3a3b5de6cd8813d
  92. `,
  93. infos: map[int]SubmoduleDiffInfo{
  94. 1: {
  95. PreviousRefID: "c8ffe777cf9c5bb47a38e3e0b3a3b5de6cd8813d",
  96. },
  97. },
  98. },
  99. {
  100. name: "moved and updated",
  101. gitdiff: `diff --git a/.gitmodules b/.gitmodules
  102. index 0510edd..bced3d8 100644
  103. --- a/.gitmodules
  104. +++ b/.gitmodules
  105. @@ -1,3 +1,3 @@
  106. [submodule "gitea-mirror"]
  107. - path = gitea
  108. + path = gitea-1.22
  109. url = https://gitea.com/gitea/gitea-mirror
  110. diff --git a/gitea b/gitea
  111. deleted file mode 160000
  112. index c8ffe77..0000000
  113. --- a/gitea
  114. +++ /dev/null
  115. @@ -1 +0,0 @@
  116. -Subproject commit c8ffe777cf9c5bb47a38e3e0b3a3b5de6cd8813d
  117. diff --git a/gitea-1.22 b/gitea-1.22
  118. new file mode 160000
  119. index 0000000..8eefa1f
  120. --- /dev/null
  121. +++ b/gitea-1.22
  122. @@ -0,0 +1 @@
  123. +Subproject commit 8eefa1f6dedf2488db2c9e12c916e8e51f673160
  124. `,
  125. infos: map[int]SubmoduleDiffInfo{
  126. 1: {
  127. PreviousRefID: "c8ffe777cf9c5bb47a38e3e0b3a3b5de6cd8813d",
  128. },
  129. 2: {
  130. NewRefID: "8eefa1f6dedf2488db2c9e12c916e8e51f673160",
  131. },
  132. },
  133. },
  134. {
  135. name: "converted to file",
  136. gitdiff: `diff --git a/.gitmodules b/.gitmodules
  137. index 0510edd..e69de29 100644
  138. --- a/.gitmodules
  139. +++ b/.gitmodules
  140. @@ -1,3 +0,0 @@
  141. -[submodule "gitea-mirror"]
  142. - path = gitea
  143. - url = https://gitea.com/gitea/gitea-mirror
  144. diff --git a/gitea b/gitea
  145. deleted file mode 160000
  146. index c8ffe77..0000000
  147. --- a/gitea
  148. +++ /dev/null
  149. @@ -1 +0,0 @@
  150. -Subproject commit c8ffe777cf9c5bb47a38e3e0b3a3b5de6cd8813d
  151. diff --git a/gitea b/gitea
  152. new file mode 100644
  153. index 0000000..33a9488
  154. --- /dev/null
  155. +++ b/gitea
  156. @@ -0,0 +1 @@
  157. +example
  158. `,
  159. infos: map[int]SubmoduleDiffInfo{
  160. 1: {
  161. PreviousRefID: "c8ffe777cf9c5bb47a38e3e0b3a3b5de6cd8813d",
  162. },
  163. },
  164. },
  165. {
  166. name: "converted to submodule",
  167. gitdiff: `diff --git a/.gitmodules b/.gitmodules
  168. index e69de29..14ee267 100644
  169. --- a/.gitmodules
  170. +++ b/.gitmodules
  171. @@ -0,0 +1,3 @@
  172. +[submodule "gitea"]
  173. + path = gitea
  174. + url = https://gitea.com/gitea/gitea-mirror
  175. diff --git a/gitea b/gitea
  176. deleted file mode 100644
  177. index 33a9488..0000000
  178. --- a/gitea
  179. +++ /dev/null
  180. @@ -1 +0,0 @@
  181. -example
  182. diff --git a/gitea b/gitea
  183. new file mode 160000
  184. index 0000000..68972a9
  185. --- /dev/null
  186. +++ b/gitea
  187. @@ -0,0 +1 @@
  188. +Subproject commit 68972a994719ae5c74e28d8fa82fa27c23399bc8
  189. `,
  190. infos: map[int]SubmoduleDiffInfo{
  191. 2: {
  192. NewRefID: "68972a994719ae5c74e28d8fa82fa27c23399bc8",
  193. },
  194. },
  195. },
  196. }
  197. for _, testcase := range tests {
  198. t.Run(testcase.name, func(t *testing.T) {
  199. diff, err := ParsePatch(t.Context(), setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(testcase.gitdiff), "")
  200. assert.NoError(t, err)
  201. for i, expected := range testcase.infos {
  202. actual := diff.Files[i]
  203. assert.NotNil(t, actual)
  204. assert.Equal(t, expected, *actual.SubmoduleDiffInfo)
  205. }
  206. })
  207. }
  208. }
  209. func TestSubmoduleInfo(t *testing.T) {
  210. sdi := &SubmoduleDiffInfo{
  211. SubmoduleName: "name",
  212. PreviousRefID: "aaaa",
  213. NewRefID: "bbbb",
  214. }
  215. ctx := t.Context()
  216. assert.EqualValues(t, "1111", sdi.CommitRefIDLinkHTML(ctx, "1111"))
  217. assert.EqualValues(t, "aaaa...bbbb", sdi.CompareRefIDLinkHTML(ctx))
  218. assert.EqualValues(t, "name", sdi.SubmoduleRepoLinkHTML(ctx))
  219. sdi.SubmoduleFile = git.NewCommitSubmoduleFile("/any/repo-link", "fullpath", "https://github.com/owner/repo", "1234")
  220. assert.EqualValues(t, `<a href="https://github.com/owner/repo/tree/1111">1111</a>`, sdi.CommitRefIDLinkHTML(ctx, "1111"))
  221. assert.EqualValues(t, `<a href="https://github.com/owner/repo/compare/aaaa...bbbb">aaaa...bbbb</a>`, sdi.CompareRefIDLinkHTML(ctx))
  222. assert.EqualValues(t, `<a href="https://github.com/owner/repo">name</a>`, sdi.SubmoduleRepoLinkHTML(ctx))
  223. }