mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08: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