Add a check for when the command is canceled by the program on Window… (#29538)
Close #29509 Windows, unlike Linux, does not have signal-specified exit codes. Therefore, we should add a Windows-specific check for Windows. If we don't do this, the logs will always show a failed status, even though the command actually works correctly. If you check the Go source code in exec_windows.go, you will see that it always returns exit code 1. ![image](https://github.com/go-gitea/gitea/assets/30816317/9dfd7c70-9995-47d9-9641-db793f58770c) The exit code 1 does not exclusively signify a SIGNAL KILL; it can indicate any issue that occurs when a program fails. (cherry picked from commit 423372d84ab3d885e47d4a00cd69d6040b61cc4c)
This commit is contained in:
parent
db19d4eb39
commit
d509031e84
|
@ -12,6 +12,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -344,6 +345,17 @@ func (c *Command) Run(opts *RunOpts) error {
|
||||||
log.Debug("slow git.Command.Run: %s (%s)", c, elapsed)
|
log.Debug("slow git.Command.Run: %s (%s)", c, elapsed)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We need to check if the context is canceled by the program on Windows.
|
||||||
|
// This is because Windows does not have signal checking when terminating the process.
|
||||||
|
// It always returns exit code 1, unlike Linux, which has many exit codes for signals.
|
||||||
|
if runtime.GOOS == "windows" &&
|
||||||
|
err != nil &&
|
||||||
|
err.Error() == "" &&
|
||||||
|
cmd.ProcessState.ExitCode() == 1 &&
|
||||||
|
ctx.Err() == context.Canceled {
|
||||||
|
return ctx.Err()
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil && ctx.Err() != context.DeadlineExceeded {
|
if err != nil && ctx.Err() != context.DeadlineExceeded {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue