mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Make gitea serv respect git binary home (#23138)
				
					
				
			Close #23137 The old code is too old (8-9 years ago) Let's try to execute the git commands from git bin home directly. The verb has been checked above, it could only be: * git-upload-pack * git-upload-archive * git-receive-pack * git-lfs-authenticate
This commit is contained in:
		
							
								
								
									
										25
									
								
								cmd/serv.go
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								cmd/serv.go
									
									
									
									
									
								
							| @@ -11,6 +11,7 @@ import ( | ||||
| 	"net/url" | ||||
| 	"os" | ||||
| 	"os/exec" | ||||
| 	"path/filepath" | ||||
| 	"regexp" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| @@ -290,17 +291,21 @@ func runServ(c *cli.Context) error { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	// Special handle for Windows. | ||||
| 	if setting.IsWindows { | ||||
| 		verb = strings.Replace(verb, "-", " ", 1) | ||||
| 	} | ||||
|  | ||||
| 	var gitcmd *exec.Cmd | ||||
| 	verbs := strings.Split(verb, " ") | ||||
| 	if len(verbs) == 2 { | ||||
| 		gitcmd = exec.CommandContext(ctx, verbs[0], verbs[1], repoPath) | ||||
| 	} else { | ||||
| 		gitcmd = exec.CommandContext(ctx, verb, repoPath) | ||||
| 	gitBinPath := filepath.Dir(git.GitExecutable) // e.g. /usr/bin | ||||
| 	gitBinVerb := filepath.Join(gitBinPath, verb) // e.g. /usr/bin/git-upload-pack | ||||
| 	if _, err := os.Stat(gitBinVerb); err != nil { | ||||
| 		// if the command "git-upload-pack" doesn't exist, try to split "git-upload-pack" to use the sub-command with git | ||||
| 		// ps: Windows only has "git.exe" in the bin path, so Windows always uses this way | ||||
| 		verbFields := strings.SplitN(verb, "-", 2) | ||||
| 		if len(verbFields) == 2 { | ||||
| 			// use git binary with the sub-command part: "C:\...\bin\git.exe", "upload-pack", ... | ||||
| 			gitcmd = exec.CommandContext(ctx, git.GitExecutable, verbFields[1], repoPath) | ||||
| 		} | ||||
| 	} | ||||
| 	if gitcmd == nil { | ||||
| 		// by default, use the verb (it has been checked above by allowedCommands) | ||||
| 		gitcmd = exec.CommandContext(ctx, gitBinVerb, repoPath) | ||||
| 	} | ||||
|  | ||||
| 	process.SetSysProcAttribute(gitcmd) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user