package util
import (
"os/exec"
"path/filepath"
"runtime"
"strings"
)
// UsingCygwinGit indicates whether we believe the host's git utility is from
// Cygwin (expects Windows paths as /cygdrive/c/dir/file) or not (expects paths
// in host-native format).
var UsingCygwinGit = isUsingCygwinGit()
func isUsingCygwinGit() bool {
if runtime.GOOS == "windows" {
// If we find the cygpath utility (which translates between UNIX-style and
// Windows-style paths) in the same directory as git, assume we're using
// Cygwin.
cygpath, err := exec.LookPath("cygpath")
if err != nil {
return false
}
var git string
git, err = exec.LookPath("git")
if err == nil && filepath.Dir(cygpath) == filepath.Dir(git) {
return true
}
}
return false
}
// ToSlashCygwin converts a path to a format suitable for sending to a Cygwin
// binary - `/dir/file` on UNIX-style systems; `c:\dir\file` on Windows without
// Cygwin; `/cygdrive/c/dir/file` on Windows with Cygwin.
func ToSlashCygwin(path string) (string, error) {
cmd := exec.Command("cygpath", path)
out, err := cmd.Output()
return strings.TrimRight(string(out), "\n"), err
}