mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-30 18:36:22 +01:00 
			
		
		
		
	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.  The exit code 1 does not exclusively signify a SIGNAL KILL; it can indicate any issue that occurs when a program fails.
This commit is contained in:
		| @@ -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 | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user