From 8eeb2877d5803d0501815466d651a519b32bbd3a Mon Sep 17 00:00:00 2001 From: zeripath Date: Sun, 10 Nov 2019 08:42:51 +0000 Subject: Adjust error reporting from merge failures and use LC_ALL=C for git (#8548) There are two major components to this PR: * This PR handles merge and rebase failures from merging a little more nicely with Flash errors rather a 500. * All git commands are run in the LC_ALL="C" environment to ensure that error messages are in English. This DefaultLocale is defined in a way that if necessary (due to platform weirdness) it can be overridden at build time using LDFLAGS="-X "code.gitea.io/gitea/modules/git.DefaultLocale=C"" with C changed for the locale as necessary. --- modules/git/command.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'modules') diff --git a/modules/git/command.go b/modules/git/command.go index 347dcfe39f..2b5288aeab 100644 --- a/modules/git/command.go +++ b/modules/git/command.go @@ -9,6 +9,7 @@ import ( "context" "fmt" "io" + "os" "os/exec" "strings" "time" @@ -24,6 +25,9 @@ var ( DefaultCommandExecutionTimeout = 60 * time.Second ) +// DefaultLocale is the default LC_ALL to run git commands in. +const DefaultLocale = "C" + // Command represents a command with its subcommands or arguments. type Command struct { name string @@ -77,7 +81,12 @@ func (c *Command) RunInDirTimeoutEnvFullPipeline(env []string, timeout time.Dura defer cancel() cmd := exec.CommandContext(ctx, c.name, c.args...) - cmd.Env = env + if env == nil { + cmd.Env = append(os.Environ(), fmt.Sprintf("LC_ALL=%s", DefaultLocale)) + } else { + cmd.Env = env + cmd.Env = append(cmd.Env, fmt.Sprintf("LC_ALL=%s", DefaultLocale)) + } cmd.Dir = dir cmd.Stdout = stdout cmd.Stderr = stderr -- cgit v1.2.3