lfsapi: teach endpointGitFinder about Context to get *git.Configuration

This commit is contained in:
rick olson 2017-10-25 16:05:08 -06:00
parent ff2aa7c2c9
commit 58987db21c
5 changed files with 65 additions and 67 deletions

@ -143,7 +143,7 @@ func TestDoWithAuthReject(t *testing.T) {
c, _ := NewClient(nil)
c.Credentials = creds
c.Endpoints = NewEndpointFinder(testEnv(map[string]string{
c.Endpoints = NewEndpointFinder(NewContext(nil, nil, map[string]string{
"lfs.url": srv.URL,
}))
@ -531,7 +531,7 @@ func TestGetCreds(t *testing.T) {
req.Header.Set(key, value)
}
ef := NewEndpointFinder(testEnv(test.Config))
ef := NewEndpointFinder(NewContext(nil, nil, test.Config))
endpoint, access, creds, credsURL, err := getCreds(credHelper, netrcFinder, ef, test.Remote, req)
if !assert.Nil(t, err) {
continue

@ -37,7 +37,8 @@ type EndpointFinder interface {
}
type endpointGitFinder struct {
git config.Environment
gitConfig *git.Configuration
gitEnv config.Environment
gitProtocol string
aliasMu sync.Mutex
@ -48,21 +49,24 @@ type endpointGitFinder struct {
urlConfig *config.URLConfig
}
func NewEndpointFinder(git config.Environment) EndpointFinder {
func NewEndpointFinder(ctx Context) EndpointFinder {
if ctx == nil {
ctx = NewContext(nil, nil, nil)
}
e := &endpointGitFinder{
gitConfig: ctx.GitConfig(),
gitEnv: ctx.GitEnv(),
gitProtocol: "https",
aliases: make(map[string]string),
urlAccess: make(map[string]Access),
}
if git != nil {
e.git = git
e.urlConfig = config.NewURLConfig(e.git)
if v, ok := git.Get("lfs.gitprotocol"); ok {
e.gitProtocol = v
}
initAliases(e, git)
e.urlConfig = config.NewURLConfig(e.gitEnv)
if v, ok := e.gitEnv.Get("lfs.gitprotocol"); ok {
e.gitProtocol = v
}
initAliases(e, e.gitEnv)
return e
}
@ -74,17 +78,17 @@ func (e *endpointGitFinder) Endpoint(operation, remote string) Endpoint {
}
func (e *endpointGitFinder) getEndpoint(operation, remote string) Endpoint {
if e.git == nil {
if e.gitEnv == nil {
return Endpoint{}
}
if operation == "upload" {
if url, ok := e.git.Get("lfs.pushurl"); ok {
if url, ok := e.gitEnv.Get("lfs.pushurl"); ok {
return e.NewEndpoint(url)
}
}
if url, ok := e.git.Get("lfs.url"); ok {
if url, ok := e.gitEnv.Get("lfs.url"); ok {
return e.NewEndpoint(url)
}
@ -98,7 +102,7 @@ func (e *endpointGitFinder) getEndpoint(operation, remote string) Endpoint {
}
func (e *endpointGitFinder) RemoteEndpoint(operation, remote string) Endpoint {
if e.git == nil {
if e.gitEnv == nil {
return Endpoint{}
}
@ -108,11 +112,11 @@ func (e *endpointGitFinder) RemoteEndpoint(operation, remote string) Endpoint {
// Support separate push URL if specified and pushing
if operation == "upload" {
if url, ok := e.git.Get("remote." + remote + ".lfspushurl"); ok {
if url, ok := e.gitEnv.Get("remote." + remote + ".lfspushurl"); ok {
return e.NewEndpoint(url)
}
}
if url, ok := e.git.Get("remote." + remote + ".lfsurl"); ok {
if url, ok := e.gitEnv.Get("remote." + remote + ".lfsurl"); ok {
return e.NewEndpoint(url)
}
@ -125,14 +129,14 @@ func (e *endpointGitFinder) RemoteEndpoint(operation, remote string) Endpoint {
}
func (e *endpointGitFinder) GitRemoteURL(remote string, forpush bool) string {
if e.git != nil {
if e.gitEnv != nil {
if forpush {
if u, ok := e.git.Get("remote." + remote + ".pushurl"); ok {
if u, ok := e.gitEnv.Get("remote." + remote + ".pushurl"); ok {
return u
}
}
if u, ok := e.git.Get("remote." + remote + ".url"); ok {
if u, ok := e.gitEnv.Get("remote." + remote + ".url"); ok {
return u
}
}
@ -187,7 +191,7 @@ func (e *endpointGitFinder) NewEndpoint(rawurl string) Endpoint {
}
func (e *endpointGitFinder) AccessFor(rawurl string) Access {
if e.git == nil {
if e.gitEnv == nil {
return NoneAccess
}
@ -214,10 +218,10 @@ func (e *endpointGitFinder) SetAccess(rawurl string, access Access) {
switch access {
case emptyAccess, NoneAccess:
git.Config.UnsetLocalKey("", key)
e.gitConfig.UnsetLocalKey("", key)
e.urlAccess[accessurl] = NoneAccess
default:
git.Config.SetLocal("", key, string(access))
e.gitConfig.SetLocal("", key, string(access))
e.urlAccess[accessurl] = access
}
}

@ -7,7 +7,7 @@ import (
)
func TestEndpointDefaultsToOrigin(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.lfsurl": "abc",
}))
@ -18,7 +18,7 @@ func TestEndpointDefaultsToOrigin(t *testing.T) {
}
func TestEndpointOverridesOrigin(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"lfs.url": "abc",
"remote.origin.lfsurl": "def",
}))
@ -30,7 +30,7 @@ func TestEndpointOverridesOrigin(t *testing.T) {
}
func TestEndpointNoOverrideDefaultRemote(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.lfsurl": "abc",
"remote.other.lfsurl": "def",
}))
@ -42,7 +42,7 @@ func TestEndpointNoOverrideDefaultRemote(t *testing.T) {
}
func TestEndpointUseAlternateRemote(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.lfsurl": "abc",
"remote.other.lfsurl": "def",
}))
@ -54,7 +54,7 @@ func TestEndpointUseAlternateRemote(t *testing.T) {
}
func TestEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "https://example.com/foo/bar",
}))
@ -65,7 +65,7 @@ func TestEndpointAddsLfsSuffix(t *testing.T) {
}
func TestBareEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "https://example.com/foo/bar.git",
}))
@ -76,7 +76,7 @@ func TestBareEndpointAddsLfsSuffix(t *testing.T) {
}
func TestEndpointSeparateClonePushUrl(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "https://example.com/foo/bar.git",
"remote.origin.pushurl": "https://readwrite.com/foo/bar.git",
}))
@ -93,7 +93,7 @@ func TestEndpointSeparateClonePushUrl(t *testing.T) {
}
func TestEndpointOverriddenSeparateClonePushLfsUrl(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "https://example.com/foo/bar.git",
"remote.origin.pushurl": "https://readwrite.com/foo/bar.git",
"remote.origin.lfsurl": "https://examplelfs.com/foo/bar",
@ -112,7 +112,7 @@ func TestEndpointOverriddenSeparateClonePushLfsUrl(t *testing.T) {
}
func TestEndpointGlobalSeparateLfsPush(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"lfs.url": "https://readonly.com/foo/bar",
"lfs.pushurl": "https://write.com/foo/bar",
}))
@ -129,7 +129,7 @@ func TestEndpointGlobalSeparateLfsPush(t *testing.T) {
}
func TestSSHEndpointOverridden(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "git@example.com:foo/bar",
"remote.origin.lfsurl": "lfs",
}))
@ -142,7 +142,7 @@ func TestSSHEndpointOverridden(t *testing.T) {
}
func TestSSHEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "ssh://git@example.com/foo/bar",
}))
@ -154,7 +154,7 @@ func TestSSHEndpointAddsLfsSuffix(t *testing.T) {
}
func TestSSHCustomPortEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "ssh://git@example.com:9000/foo/bar",
}))
@ -166,7 +166,7 @@ func TestSSHCustomPortEndpointAddsLfsSuffix(t *testing.T) {
}
func TestBareSSHEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "git@example.com:foo/bar.git",
}))
@ -178,7 +178,7 @@ func TestBareSSHEndpointAddsLfsSuffix(t *testing.T) {
}
func TestSSHEndpointFromGlobalLfsUrl(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"lfs.url": "git@example.com:foo/bar.git",
}))
@ -190,7 +190,7 @@ func TestSSHEndpointFromGlobalLfsUrl(t *testing.T) {
}
func TestHTTPEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "http://example.com/foo/bar",
}))
@ -202,7 +202,7 @@ func TestHTTPEndpointAddsLfsSuffix(t *testing.T) {
}
func TestBareHTTPEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "http://example.com/foo/bar.git",
}))
@ -214,7 +214,7 @@ func TestBareHTTPEndpointAddsLfsSuffix(t *testing.T) {
}
func TestGitEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "git://example.com/foo/bar",
}))
@ -226,7 +226,7 @@ func TestGitEndpointAddsLfsSuffix(t *testing.T) {
}
func TestGitEndpointAddsLfsSuffixWithCustomProtocol(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "git://example.com/foo/bar",
"lfs.gitprotocol": "http",
}))
@ -239,7 +239,7 @@ func TestGitEndpointAddsLfsSuffixWithCustomProtocol(t *testing.T) {
}
func TestBareGitEndpointAddsLfsSuffix(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"remote.origin.url": "git://example.com/foo/bar.git",
}))
@ -266,7 +266,7 @@ func TestAccessConfig(t *testing.T) {
}
for value, expected := range tests {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"lfs.url": "http://example.com",
"lfs.http://example.com.access": value,
"lfs.https://example.com.access": "bad",
@ -285,7 +285,7 @@ func TestAccessConfig(t *testing.T) {
// Test again but with separate push url
for value, expected := range tests {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"lfs.url": "http://example.com",
"lfs.pushurl": "http://examplepush.com",
"lfs.http://example.com.access": value,
@ -312,7 +312,7 @@ func TestAccessAbsentConfig(t *testing.T) {
}
func TestSetAccess(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{}))
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{}))
assert.Equal(t, NoneAccess, finder.AccessFor("http://example.com"))
finder.SetAccess("http://example.com", NTLMAccess)
@ -320,7 +320,7 @@ func TestSetAccess(t *testing.T) {
}
func TestChangeAccess(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"lfs.http://example.com.access": "basic",
}))
@ -330,7 +330,7 @@ func TestChangeAccess(t *testing.T) {
}
func TestDeleteAccessWithNone(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"lfs.http://example.com.access": "basic",
}))
@ -340,7 +340,7 @@ func TestDeleteAccessWithNone(t *testing.T) {
}
func TestDeleteAccessWithEmptyString(t *testing.T) {
finder := NewEndpointFinder(testEnv(map[string]string{
finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{
"lfs.http://example.com.access": "basic",
}))

@ -43,8 +43,6 @@ type Client struct {
ntlmSessions map[string]ntlm.ClientSession
ntlmMu sync.Mutex
gitConfig *git.Configuration
httpLogger *syncLogger
LoggingStats bool // DEPRECATED
@ -63,22 +61,11 @@ type Context interface {
func NewClient(ctx Context) (*Client, error) {
if ctx == nil {
return newClient(nil, nil, nil)
}
return newClient(ctx.GitConfig(), ctx.OSEnv(), ctx.GitEnv())
}
func newClient(gitConf *git.Configuration, osEnv, gitEnv config.Environment) (*Client, error) {
if gitConf == nil {
gitConf = git.NewConfig("", "")
}
if osEnv == nil {
osEnv = make(testEnv)
}
if gitEnv == nil {
gitEnv = make(testEnv)
ctx = NewContext(nil, nil, nil)
}
gitEnv := ctx.GitEnv()
osEnv := ctx.OSEnv()
netrc, netrcfile, err := ParseNetrc(osEnv)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("bad netrc file %s", netrcfile))
@ -95,7 +82,7 @@ func newClient(gitConf *git.Configuration, osEnv, gitEnv config.Environment) (*C
}
c := &Client{
Endpoints: NewEndpointFinder(gitEnv),
Endpoints: NewEndpointFinder(ctx),
Credentials: creds,
SSH: sshResolver,
Netrc: netrc,
@ -106,7 +93,6 @@ func newClient(gitConf *git.Configuration, osEnv, gitEnv config.Environment) (*C
SkipSSLVerify: !gitEnv.Bool("http.sslverify", true) || osEnv.Bool("GIT_SSL_NO_VERIFY", false),
Verbose: osEnv.Bool("GIT_CURL_VERBOSE", false),
DebuggingVerbose: osEnv.Bool("LFS_DEBUG_HTTP", false),
gitConfig: gitConf,
gitEnv: gitEnv,
osEnv: osEnv,
uc: config.NewURLConfig(gitEnv),
@ -174,11 +160,19 @@ func (c *testContext) GitEnv() config.Environment {
func NewContext(gitConf *git.Configuration, osEnv, gitEnv map[string]string) Context {
c := &testContext{gitConfig: gitConf}
if c.gitConfig == nil {
c.gitConfig = git.NewConfig("", "")
}
if osEnv != nil {
c.osEnv = testEnv(osEnv)
} else {
c.osEnv = make(testEnv)
}
if gitEnv != nil {
c.gitEnv = testEnv(gitEnv)
} else {
c.gitEnv = make(testEnv)
}
return c
}

@ -139,7 +139,7 @@ func (*testDataCallback) Errorf(format string, args ...interface{}) {
func buildManifest(r *test.Repo) (*tq.Manifest, error) {
// Configure the endpoint manually
finder := lfsapi.NewEndpointFinder(r.GitEnv())
finder := lfsapi.NewEndpointFinder(r)
var endp lfsapi.Endpoint
if len(cloneUrl) > 0 {