forked from Shiloh/githaven
d0183dfa49
Introduce a new function checkGitVersionCompatibility, when the git version can't be used by Gitea, tell the end users to downgrade or upgrade. The refactored functions are related to make the code easier to test. And simplify the comments for "safe.directory" --------- Co-authored-by: delvh <dev.lh@web.de>
119 lines
3.4 KiB
Go
119 lines
3.4 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package git
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"code.gitea.io/gitea/modules/setting"
|
|
"code.gitea.io/gitea/modules/util"
|
|
|
|
"github.com/hashicorp/go-version"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func testRun(m *testing.M) error {
|
|
gitHomePath, err := os.MkdirTemp(os.TempDir(), "git-home")
|
|
if err != nil {
|
|
return fmt.Errorf("unable to create temp dir: %w", err)
|
|
}
|
|
defer util.RemoveAll(gitHomePath)
|
|
setting.Git.HomePath = gitHomePath
|
|
|
|
if err = InitFull(context.Background()); err != nil {
|
|
return fmt.Errorf("failed to call Init: %w", err)
|
|
}
|
|
|
|
exitCode := m.Run()
|
|
if exitCode != 0 {
|
|
return fmt.Errorf("run test failed, ExitCode=%d", exitCode)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func TestMain(m *testing.M) {
|
|
if err := testRun(m); err != nil {
|
|
_, _ = fmt.Fprintf(os.Stderr, "Test failed: %v", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func gitConfigContains(sub string) bool {
|
|
if b, err := os.ReadFile(HomeDir() + "/.gitconfig"); err == nil {
|
|
return strings.Contains(string(b), sub)
|
|
}
|
|
return false
|
|
}
|
|
|
|
func TestGitConfig(t *testing.T) {
|
|
assert.False(t, gitConfigContains("key-a"))
|
|
|
|
assert.NoError(t, configSetNonExist("test.key-a", "val-a"))
|
|
assert.True(t, gitConfigContains("key-a = val-a"))
|
|
|
|
assert.NoError(t, configSetNonExist("test.key-a", "val-a-changed"))
|
|
assert.False(t, gitConfigContains("key-a = val-a-changed"))
|
|
|
|
assert.NoError(t, configSet("test.key-a", "val-a-changed"))
|
|
assert.True(t, gitConfigContains("key-a = val-a-changed"))
|
|
|
|
assert.NoError(t, configAddNonExist("test.key-b", "val-b"))
|
|
assert.True(t, gitConfigContains("key-b = val-b"))
|
|
|
|
assert.NoError(t, configAddNonExist("test.key-b", "val-2b"))
|
|
assert.True(t, gitConfigContains("key-b = val-b"))
|
|
assert.True(t, gitConfigContains("key-b = val-2b"))
|
|
|
|
assert.NoError(t, configUnsetAll("test.key-b", "val-b"))
|
|
assert.False(t, gitConfigContains("key-b = val-b"))
|
|
assert.True(t, gitConfigContains("key-b = val-2b"))
|
|
|
|
assert.NoError(t, configUnsetAll("test.key-b", "val-2b"))
|
|
assert.False(t, gitConfigContains("key-b = val-2b"))
|
|
|
|
assert.NoError(t, configSet("test.key-x", "*"))
|
|
assert.True(t, gitConfigContains("key-x = *"))
|
|
assert.NoError(t, configSetNonExist("test.key-x", "*"))
|
|
assert.NoError(t, configUnsetAll("test.key-x", "*"))
|
|
assert.False(t, gitConfigContains("key-x = *"))
|
|
}
|
|
|
|
func TestSyncConfig(t *testing.T) {
|
|
oldGitConfig := setting.GitConfig
|
|
defer func() {
|
|
setting.GitConfig = oldGitConfig
|
|
}()
|
|
|
|
setting.GitConfig.Options["sync-test.cfg-key-a"] = "CfgValA"
|
|
assert.NoError(t, syncGitConfig())
|
|
assert.True(t, gitConfigContains("[sync-test]"))
|
|
assert.True(t, gitConfigContains("cfg-key-a = CfgValA"))
|
|
}
|
|
|
|
func TestParseGitVersion(t *testing.T) {
|
|
v, err := parseGitVersionLine("git version 2.29.3")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "2.29.3", v.String())
|
|
|
|
v, err = parseGitVersionLine("git version 2.29.3.windows.1")
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "2.29.3", v.String())
|
|
|
|
_, err = parseGitVersionLine("git version")
|
|
assert.Error(t, err)
|
|
|
|
_, err = parseGitVersionLine("git version windows")
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestCheckGitVersionCompatibility(t *testing.T) {
|
|
assert.NoError(t, checkGitVersionCompatibility(version.Must(version.NewVersion("2.43.0"))))
|
|
assert.ErrorContains(t, checkGitVersionCompatibility(version.Must(version.NewVersion("2.43.1"))), "regression bug of GIT_FLUSH")
|
|
assert.NoError(t, checkGitVersionCompatibility(version.Must(version.NewVersion("2.43.2"))))
|
|
}
|