diff --git a/lfs/client.go b/lfs/client.go index d76b1893..711ac420 100644 --- a/lfs/client.go +++ b/lfs/client.go @@ -653,7 +653,29 @@ func getCreds(req *http.Request) (Creds, error) { } } - creds, err := credentials(req.URL) + credsUrl := apiUrl + if len(Config.CurrentRemote) > 0 { + if u, ok := Config.GitConfig("remote." + Config.CurrentRemote + ".url"); ok { + gitRemoteUrl, err := url.Parse(u) + + if err == nil && + gitRemoteUrl.Scheme == apiUrl.Scheme && + gitRemoteUrl.Host == apiUrl.Host { + + if gitRemoteUrl.User != nil { + if pass, ok := gitRemoteUrl.User.Password(); ok { + fmt.Fprintln(os.Stderr, "warning: current Git remote contains credentials") + setRequestAuth(req, gitRemoteUrl.User.Username(), pass) + return nil, nil + } + } + + credsUrl = gitRemoteUrl + } + } + } + + creds, err := credentials(credsUrl) if err != nil { return nil, err } diff --git a/lfs/credentials.go b/lfs/credentials.go index d3348a32..7f595a6c 100644 --- a/lfs/credentials.go +++ b/lfs/credentials.go @@ -17,7 +17,8 @@ type credentialFunc func(Creds, string) (credentialFetcher, error) var execCreds credentialFunc func credentials(u *url.URL) (Creds, error) { - creds := Creds{"protocol": u.Scheme, "host": u.Host} + path := strings.TrimPrefix(u.Path, "/") + creds := Creds{"protocol": u.Scheme, "host": u.Host, "path": path} cmd, err := execCreds(creds, "fill") if err != nil { return nil, err