aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcharles <30816317+charles7668@users.noreply.github.com>2024-03-02 21:38:34 +0800
committerGitHub <noreply@github.com>2024-03-02 13:38:34 +0000
commit423372d84ab3d885e47d4a00cd69d6040b61cc4c (patch)
treeb30f51928601801ecd0e30387f5c518ac643755a
parente650f64d812f5ebeb4a11d2ec20f2376c6d963bc (diff)
downloadgitea-423372d84ab3d885e47d4a00cd69d6040b61cc4c.tar.gz
gitea-423372d84ab3d885e47d4a00cd69d6040b61cc4c.zip
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.
-rw-r--r--modules/git/command.go12
1 files changed, 12 insertions, 0 deletions
diff --git a/modules/git/command.go b/modules/git/command.go
index 9305ef6f92..371109730a 100644
--- a/modules/git/command.go
+++ b/modules/git/command.go
@@ -12,6 +12,7 @@ import (
"io"
"os"
"os/exec"
+ "runtime"
"strings"
"time"
@@ -344,6 +345,17 @@ func (c *Command) Run(opts *RunOpts) error {
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 {
return err
}