|
|
|
|
@ -16,6 +16,7 @@ import ( |
|
|
|
|
"path" |
|
|
|
|
"path/filepath" |
|
|
|
|
"reflect" |
|
|
|
|
"runtime" |
|
|
|
|
"sort" |
|
|
|
|
"strconv" |
|
|
|
|
"strings" |
|
|
|
|
@ -412,6 +413,7 @@ func cleanMountPoint(mount string) (string, error) { |
|
|
|
|
if mount == "" { |
|
|
|
|
return "", errors.New("mount point cannot be empty") |
|
|
|
|
} |
|
|
|
|
mount = cleanMinGWPathConversionIfNeeded(mount) |
|
|
|
|
if !strings.HasPrefix(mount, "/") { |
|
|
|
|
mount = "/" + mount |
|
|
|
|
} |
|
|
|
|
@ -422,6 +424,26 @@ func cleanMountPoint(mount string) (string, error) { |
|
|
|
|
return "", fmt.Errorf("invalid mount point %q", mount) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// cleanMinGWPathConversionIfNeeded strips the EXEPATH prefix from the given
|
|
|
|
|
// path if the path is a MinGW(ish) (Windows) shell arg.
|
|
|
|
|
//
|
|
|
|
|
// MinGW(ish) (Windows) shells perform POSIX-to-Windows path conversion
|
|
|
|
|
// converting the leading "/" of any shell arg to the EXEPATH, which mangles the
|
|
|
|
|
// mount point. Strip the EXEPATH prefix if it exists. #7963
|
|
|
|
|
//
|
|
|
|
|
// "/C:/Program Files/Git/foo" -> "/foo"
|
|
|
|
|
func cleanMinGWPathConversionIfNeeded(path string) string { |
|
|
|
|
// Only do this on Windows.
|
|
|
|
|
if runtime.GOOS != "windows" { |
|
|
|
|
return path |
|
|
|
|
} |
|
|
|
|
if _, ok := os.LookupEnv("MSYSTEM"); ok { |
|
|
|
|
exepath := filepath.ToSlash(os.Getenv("EXEPATH")) |
|
|
|
|
path = strings.TrimPrefix(path, exepath) |
|
|
|
|
} |
|
|
|
|
return path |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func expandProxyTarget(source string) (string, error) { |
|
|
|
|
if !strings.Contains(source, "://") { |
|
|
|
|
source = "http://" + source |
|
|
|
|
|