You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			43 lines
		
	
	
		
			928 B
		
	
	
	
		
			Go
		
	
			
		
		
	
	
			43 lines
		
	
	
		
			928 B
		
	
	
	
		
			Go
		
	
| //go:build !windows
 | |
| // +build !windows
 | |
| 
 | |
| package gitutil
 | |
| 
 | |
| import (
 | |
| 	"os"
 | |
| 	"os/exec"
 | |
| 	"path/filepath"
 | |
| 
 | |
| 	"github.com/moby/sys/mountinfo"
 | |
| )
 | |
| 
 | |
| func gitPath(wd string) (string, error) {
 | |
| 	// On WSL2 we need to check if the current working directory is mounted on
 | |
| 	// a Windows drive and if so, we need to use the Windows git executable.
 | |
| 	if os.Getenv("WSL_DISTRO_NAME") != "" && wd != "" {
 | |
| 		// ensure any symlinks are resolved
 | |
| 		wdPath, err := filepath.EvalSymlinks(wd)
 | |
| 		if err != nil {
 | |
| 			return "", err
 | |
| 		}
 | |
| 		mi, err := mountinfo.GetMounts(mountinfo.ParentsFilter(wdPath))
 | |
| 		if err != nil {
 | |
| 			return "", err
 | |
| 		}
 | |
| 		// find the longest mount point
 | |
| 		var idx, maxlen int
 | |
| 		for i := range mi {
 | |
| 			if len(mi[i].Mountpoint) > maxlen {
 | |
| 				maxlen = len(mi[i].Mountpoint)
 | |
| 				idx = i
 | |
| 			}
 | |
| 		}
 | |
| 		if mi[idx].FSType == "9p" {
 | |
| 			if p, err := exec.LookPath("git.exe"); err == nil {
 | |
| 				return p, nil
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	return exec.LookPath("git")
 | |
| }
 |