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.

git_test.go 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package git
  4. import (
  5. "context"
  6. "fmt"
  7. "os"
  8. "strings"
  9. "testing"
  10. "code.gitea.io/gitea/modules/setting"
  11. "code.gitea.io/gitea/modules/util"
  12. "github.com/hashicorp/go-version"
  13. "github.com/stretchr/testify/assert"
  14. )
  15. func testRun(m *testing.M) error {
  16. gitHomePath, err := os.MkdirTemp(os.TempDir(), "git-home")
  17. if err != nil {
  18. return fmt.Errorf("unable to create temp dir: %w", err)
  19. }
  20. defer util.RemoveAll(gitHomePath)
  21. setting.Git.HomePath = gitHomePath
  22. if err = InitFull(context.Background()); err != nil {
  23. return fmt.Errorf("failed to call Init: %w", err)
  24. }
  25. exitCode := m.Run()
  26. if exitCode != 0 {
  27. return fmt.Errorf("run test failed, ExitCode=%d", exitCode)
  28. }
  29. return nil
  30. }
  31. func TestMain(m *testing.M) {
  32. if err := testRun(m); err != nil {
  33. _, _ = fmt.Fprintf(os.Stderr, "Test failed: %v", err)
  34. os.Exit(1)
  35. }
  36. }
  37. func gitConfigContains(sub string) bool {
  38. if b, err := os.ReadFile(HomeDir() + "/.gitconfig"); err == nil {
  39. return strings.Contains(string(b), sub)
  40. }
  41. return false
  42. }
  43. func TestGitConfig(t *testing.T) {
  44. assert.False(t, gitConfigContains("key-a"))
  45. assert.NoError(t, configSetNonExist("test.key-a", "val-a"))
  46. assert.True(t, gitConfigContains("key-a = val-a"))
  47. assert.NoError(t, configSetNonExist("test.key-a", "val-a-changed"))
  48. assert.False(t, gitConfigContains("key-a = val-a-changed"))
  49. assert.NoError(t, configSet("test.key-a", "val-a-changed"))
  50. assert.True(t, gitConfigContains("key-a = val-a-changed"))
  51. assert.NoError(t, configAddNonExist("test.key-b", "val-b"))
  52. assert.True(t, gitConfigContains("key-b = val-b"))
  53. assert.NoError(t, configAddNonExist("test.key-b", "val-2b"))
  54. assert.True(t, gitConfigContains("key-b = val-b"))
  55. assert.True(t, gitConfigContains("key-b = val-2b"))
  56. assert.NoError(t, configUnsetAll("test.key-b", "val-b"))
  57. assert.False(t, gitConfigContains("key-b = val-b"))
  58. assert.True(t, gitConfigContains("key-b = val-2b"))
  59. assert.NoError(t, configUnsetAll("test.key-b", "val-2b"))
  60. assert.False(t, gitConfigContains("key-b = val-2b"))
  61. assert.NoError(t, configSet("test.key-x", "*"))
  62. assert.True(t, gitConfigContains("key-x = *"))
  63. assert.NoError(t, configSetNonExist("test.key-x", "*"))
  64. assert.NoError(t, configUnsetAll("test.key-x", "*"))
  65. assert.False(t, gitConfigContains("key-x = *"))
  66. }
  67. func TestSyncConfig(t *testing.T) {
  68. oldGitConfig := setting.GitConfig
  69. defer func() {
  70. setting.GitConfig = oldGitConfig
  71. }()
  72. setting.GitConfig.Options["sync-test.cfg-key-a"] = "CfgValA"
  73. assert.NoError(t, syncGitConfig())
  74. assert.True(t, gitConfigContains("[sync-test]"))
  75. assert.True(t, gitConfigContains("cfg-key-a = CfgValA"))
  76. }
  77. func TestParseGitVersion(t *testing.T) {
  78. v, err := parseGitVersionLine("git version 2.29.3")
  79. assert.NoError(t, err)
  80. assert.Equal(t, "2.29.3", v.String())
  81. v, err = parseGitVersionLine("git version 2.29.3.windows.1")
  82. assert.NoError(t, err)
  83. assert.Equal(t, "2.29.3", v.String())
  84. _, err = parseGitVersionLine("git version")
  85. assert.Error(t, err)
  86. _, err = parseGitVersionLine("git version windows")
  87. assert.Error(t, err)
  88. }
  89. func TestCheckGitVersionCompatibility(t *testing.T) {
  90. assert.NoError(t, checkGitVersionCompatibility(version.Must(version.NewVersion("2.43.0"))))
  91. assert.ErrorContains(t, checkGitVersionCompatibility(version.Must(version.NewVersion("2.43.1"))), "regression bug of GIT_FLUSH")
  92. assert.NoError(t, checkGitVersionCompatibility(version.Must(version.NewVersion("2.43.2"))))
  93. }