mirror of
https://gitea.com/gitea/tea.git
synced 2026-09-13 17:06:35 -04:00
Force the C locale for git subprocesses so git output used for error classification remains stable and parseable regardless of the user shell language. Add a regression test that simulates a localized git "not a repository" error and verifies it is classified as ErrRepositoryNotExists. Signed-off-by: Lunny Xiao <xiaolunwen@gmail.com>
41 lines
1 KiB
Go
41 lines
1 KiB
Go
// Copyright 2026 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package git
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"runtime"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestOpenClassifiesLocalizedNotRepoError(t *testing.T) {
|
|
if runtime.GOOS == "windows" {
|
|
t.Skip("test uses a POSIX shell script as fake git")
|
|
}
|
|
|
|
fakeGitDir := t.TempDir()
|
|
fakeGit := filepath.Join(fakeGitDir, "git")
|
|
script := `#!/bin/sh
|
|
locale="${LC_ALL:-${LANG:-C}}"
|
|
if [ "$locale" = "C" ]; then
|
|
echo "fatal: not a git repository (or any of the parent directories): .git" >&2
|
|
else
|
|
echo "fatal: Kein Git-Repository (oder irgendein Elternverzeichnis bis zum Einhangepunkt /)" >&2
|
|
fi
|
|
exit 128
|
|
`
|
|
require.NoError(t, os.WriteFile(fakeGit, []byte(script), 0o755))
|
|
|
|
t.Setenv("PATH", fakeGitDir+string(os.PathListSeparator)+os.Getenv("PATH"))
|
|
t.Setenv("LC_ALL", "de_DE.UTF-8")
|
|
t.Setenv("LANG", "de_DE.UTF-8")
|
|
t.Setenv("LANGUAGE", "de_DE:de")
|
|
|
|
_, err := (cliBackend{}).Open(t.TempDir())
|
|
require.ErrorIs(t, err, ErrRepositoryNotExists)
|
|
}
|