mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 10:27:29 -04:00 
			
		
		
		
	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"))))
 | |
| }
 |